C# MVC5有助于理解ViewModel

C# MVC5有助于理解ViewModel,c#,asp.net-mvc,C#,Asp.net Mvc,好的,我有我的ViewModel,我了解控制器的功能,只是实现起来有困难。我不知道如何为ViewModel编写一个控制器,我自己也试过研究它,但找不到任何东西 这是我的viewModel,我将如何构建控制器?不是要你为我做,而是要你怎么做 public class ViewOrderViewModel { //From ORDER Table public int OrderId { get; set; } public System.DateTime OrderDate

好的,我有我的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; }
}

仍然不确定如何将ViewModel类中的产品列表映射到db中的产品列表通常,视图将“绑定”到ViewModel。这就像说“好的,我是‘订单’的视图,我只需要担心您在ViewOrderViewModel中定义的属性”

该绑定不需要控制器。绑定在视图顶部声明:

Order.cshtml

@Model MyProject.Web.ViewModels.ViewOrderViewModel
<div>
    <!-- Html for the view-->
</div>
编辑:回答您在评论中提出的问题:如果您需要使用不同模型(如数据库模型)的值填充ViewModel,您可以创建如下映射器:

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

        return viewModel;
    }
然后在控制器中,您可以执行以下操作:


你有没有检查过下面的QA:我有,我读过很多不同的论坛,其中包括我似乎无法编写控制器,很多都只是传递给控制器,这真的很有帮助,谢谢!只是一个问题,我明白了,但当我定义数据时;viewModel.OrderId=123;等等,我如何告诉它从order类获取数据?例如,类似viewModel.OrderId=Order.OrderId这样的东西,它是如何工作的?您需要准确地执行该操作:viewModel.OrderId=Order.OrderId。一种常见的做法是创建一个“映射”函数,在该函数中传入一个Order对象,然后返回一个实例化的ViewModel对象。我将如何创建映射函数?很抱歉,我仍然在学习这些简单化的问题,这是非常感激的。我更新了我的答案,回答了你的问题。谢谢你,我学到了很多!如何填充产品字段?因为它不仅仅是一个产品,还可能是一个产品列表
<span>OrderId: @Model.OrderId </span>
    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);
    }
    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);