簡體   English   中英

MVC 5幫助了解ViewModel

[英]MVC 5 Help Understanding ViewModel

好吧,所以我有了ViewModel,而且我了解了控制器的功能,但是我很難實現它。 我不知道如何為ViewModel編寫控制器,我嘗試自己研究它,但找不到任何東西。

這是我的viewModel,我將如何構造控制器? 不是要你幫我做,而是要怎么做

public class ViewOrderViewModel
{
    //From ORDER Table
    public int OrderId { get; set; }
    public System.DateTime OrderDate { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Address { get; set; }
    public string City { get; set; }
    public string PostalCode { get; set; }
    public string Country { get; set; }
    public string Email { get; set; }
    public decimal Total { get; set; }


    //from Products
    public List<Product> Products { get; set; }
}

UPDATE

public class ViewOrderController : Controller
    {
        // GET: ViewOrder
        public ActionResult ViewOrders()
        {

            var order = new Order();
            var viewModel = GetViewModel(order);

            return View(viewModel);
        }



        public ViewOrderViewModel GetViewModel(Order orderObject)
        {
            ViewOrderViewModel viewModel = new ViewOrderViewModel();

            viewModel.OrderId = orderObject.OrderId;
            viewModel.OrderDate = orderObject.OrderDate;
            viewModel.FirstName = orderObject.FirstName;
            viewModel.LastName = orderObject.LastName;
            viewModel.City = orderObject.City;
            viewModel.Address = orderObject.Address;
            viewModel.Country = orderObject.Country;
            viewModel.Email = orderObject.Email;
            viewModel.PostalCode = orderObject.PostalCode;
            viewModel.Total = orderObject.Total;



            return viewModel;
        }
    }

仍不確定如何將ViewModel類中的產品列表映射到db中的產品列表

通常,您的視圖將被“綁定”到ViewModel。 這就像在說“好吧,我是“訂單”的視圖,我只需要擔心您在ViewOrderViewModel中定義的屬性”。

進行綁定不需要控制器。 綁定在視圖頂部聲明:

Order.cshtml

@Model MyProject.Web.ViewModels.ViewOrderViewModel
<div>
    <!-- Html for the view-->
</div>

這使您可以在視圖中訪問該模型的屬性。 剃刀具有一些使生活變得輕松的功能。 例如,如果要顯示OrderId,它可能如下所示:

<span>OrderId: @Model.OrderId </span>

視圖並不關心為每個屬性設置什么值,只關心屬性是否存在。 控制器發揮作用的地方是用所需的值填充這些屬性,然后將ViewModel傳遞給視圖:

    public ActionResult Order()
    {
        var viewModel = new ViewOrderViewModel();
        // Load data into each property
        viewModel.OrderId = 123; // etc..

        // Return it to the view. Asp.net knows to return
        // it to the Order.cshtml view because the view
        // and the controller action share the same name.
        return View(viewModel);
    }

編輯:在評論中回答您的問題:如果您需要用其他模型(例如數據庫模型)中的值填充ViewModel,則可以這樣創建一個映射器:

    public ViewOrderViewModel GetViewModel(Order orderObject)
    {
        ViewOrderViewModel viewModel = new ViewOrderViewModel();
        viewModel.OrderId = orderObject.OrderId;
        viewModel.FirstName = orderObject.FirstName;
        // etc...

        return viewModel;
    }

然后在您的控制器中執行以下操作:

// var order = new Order()
var viewModel = GetViewModel(order);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM