Как добавить элементы в ListView в проекте MVC из контроллера

1

Я видел много веб-сайтов, которые показывают, как это сделать:

<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, где я могу вытащить данные из Model in View.

Я скопировал модель в 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
    Чувак, что ?! « ... доступ к модели с точки зрения, что является плохой практикой. » Model не отображается магическим образом. View построено вокруг Model что означает, что Model должна быть "проанализирована", т.е.
  • 0
    Я смотрел на неправильную диаграмму MVC, и я отредактировал вопрос
Показать ещё 5 комментариев
Теги:
asp.net-mvc
listview

1 ответ

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 ()?
  • 0
    @YagneshCangi, да, действие будет идти в контроллере. Я немного изменил его, возможно, теперь он проливает немного света на то, что делать дальше. По сути, вам нужно получить XElement из файлов XML и затем передать его конструктору OrderModel . Этот метод использует существующую логику вашего модельного класса.
Показать ещё 8 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню