2014-08-28 100 views
1

我见过很多网站的表现出做的方式添加在ListView项目是:如何在MVC项目从控制器

<ul> 
@foreach (var customer in Model.Customer) 
{ 
    <li>@customer</li> 
} 
</ul> 

我想要做到的是有一个列表视图这增加数据来自XML文件。

我做了一个窗口同样的事情形成卫生组织后面的代码看起来像:

  XElement xRoot = ManagerHelper.XMLManager().LoadOrderXML(); 

      var ordermodel = new OrderModel(xRoot).orders.List; 
      lstbxClientNameNo.Items.Clear(); 
      foreach (var order in ordermodel) 
      { 
       lstbxClientNameNo.Items.Add(string.Format("{1} - {0}", 
       order.clientName, order.orderNumber)); 
      } 

但是可能有人指导我做相同的/类似的事情在一个MVC项目,我可以拉从数据模型在视图中。

我已经将模型复制到Windows窗体的MVC,我希望使用相同的数据。我在MVC上构建相同应用程序的原因是因为我试图学习MVC以及它如何工作。

我的模型看起来像:

public XElement LoadOrderXML() 
     { 
      XmlDocument xmldoc = new XmlDocument(); 

      xmldoc.Load(Environment.GetFolderPath(MYFORLDERPATH)); 
      XElement xRoot = XElement.Parse(xmldoc.InnerXml); 
      return xRoot; 




    public class OrderModel 
    { 
     public Orders orders; 

     public OrderModel(XElement xOrder) 
     { 
      orders = new Orders(xOrder);   
     } 

     public class Order 
     { 
      public string orderNumber, clientName; 
      public decimal totalOrderPrice; 
      public Products products; 

      public Order() 
      { 
      } 

      public Order(XElement xOrder) 
      { 
       XElement xClientNumber = xOrder.Element("OrderNumber"); 
       XElement xClientName = xOrder.Element("ClientName"); 
       XElement xTotalOrderPrice = xOrder.Element("TotalOrderPrice"); 

       XElement xProduct = xOrder.Element("Products"); 

       if (xClientNumber == null) return; 
       orderNumber = xClientNumber.Value; 
       clientName = xClientName.Value; 
       totalOrderPrice = decimal.Parse(xTotalOrderPrice.Value); 
       products = new Products(xProduct); 
      } 

      public XElement ToXML() 
      { 
       var xOrder = new XElement("Order"); 

       var xClientNumber = new XElement("OrderNumber", orderNumber); 
       var xClientName = new XElement("ClientName", clientName); 
       var xTotalOrderPrice = new XElement("TotalOrderPrice", 
                totalOrderPrice); 
       var xProducts = new XElement("Products", products); 
       xOrder.Add(xClientNumber); 
       xOrder.Add(xClientName); 
       xOrder.Add(xTotalOrderPrice); 
       xOrder.Add(xProducts); 

       return xOrder; 
      } 
     } 

     public class Orders 
     { 
      private readonly List<Order> _list; 
      public List<Order> List { get { return _list; } } 

      public Orders(XElement xAddresses) 
      { 
       _list = new List<Order>(); 

       var xProductList = xAddresses.Descendants().ToList(); 

       foreach (XElement ele2 in xAddresses.Descendants("Order")) 
       { 
        _list.Add(new Order(ele2)); 
       } 
      }   
     } 
+0

老兄,什么?! “_...从视图中访问模型是一种糟糕的做法。”“模型”不会神奇地呈现。 'View'是围绕'Model'构建的,这意味着'Model'必须被“解析”,即被访问。 – 2014-08-28 11:15:01

+0

我在看一个错误的MVC图,并且编辑了问题 – Yagzii 2014-08-28 11:23:07

+0

您是否已经定义了一个模型?你是否想要使用winforms应用程序中使用的相同数据? – 2014-08-28 11:29:17

回答

1

根据您的意见和代码,我认为你正在寻找的是这样的:

<ul> 
@foreach (Order order in Model.orders.List) 
{ 
    <li>@order.clientName - @order.orderNumber</li> 
} 
</ul> 

这是假设你正在发送OrderModel对象作为查看模型:

public ActionResult MyOrderAction() 
{ 
    //get the XML 
    XElement xmlData = ReadTheXmlData(); 

    //get the model 
    OrderModel model = new OrderModel(xmlData); 

    return View(model); 
} 
+0

对不起,但我很新的MVC,我不知道在哪里把MyOrderAction()。我假设它进入控制器。我在GetOrderModel()中放什么? – Yagzii 2014-08-28 11:59:19

+0

@YagneshCangi,是的,行动将在控制器中进行。我已经改变了一点,或许它现在对接下来要做的事情有所了解。基本上,您需要从XML文件中获取'XElement',然后将其传递给'OrderModel'构造函数。此方法使用模型类的现有逻辑。 – 2014-08-28 12:06:33

+0

我已经添加了代码,现在它在@foreach上给我一个错误 - “'Mvc_Accounts.Models.OrderModel'不包含'订单'的定义。 Mvc账户是我的项目叫做 – Yagzii 2014-08-28 14:09:53

相关问题