C# 如何在mvc4中向MVC ViewModel写入显示信息

C# 如何在mvc4中向MVC ViewModel写入显示信息,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,我的第一个问题是 在我的领域中,我有类被调用 学生: public class Student:Person { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int UserID { get; set; } public string FirstName { get; set; } public string MiddleName { get; s

我的第一个问题是

在我的领域中,我有类被调用

学生:

public class Student:Person
{

    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int UserID { get; set; }
    public string FirstName { get; set; }
    public string MiddleName { get; set; }
    public string LastName { get; set; }
    public string EmailAddress { get; set; }
    public virtual ICollection<Order> Orders { get; set; }
    public virtual Project Project { get; set; }
}
订单:

public class Order
{


    [Key]
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
    public int OrderID { get; set; }
    public DateTime OrderDate { get; set; }
    public bool IsCollected { get; set; }
    public DateTime CollectionDate { get; set; }
    public decimal OrderTotal { get; set; }
    public virtual Student Student { get; set; }
    public virtual ICollection<Component> Components { get; set; }

    public void CheckBudget()
    {

    }

}
我尝试做两件事:

1) 在视图中显示学生、项目、组件和订单模型中的数据。 2) 使用表单将数据写入视图中的学生、项目、组件和订单模型

请你给我指路


提前感谢您的帮助。

您可以为视图创建视图模型,并在控制器中进行准备。 我不确定你想要呈现的信息的结构是什么

假设您希望在此显示
订单信息

为此,创建一个
OrderViewModel
,并将视图特定的属性放入其中。不必包括订单中的所有其他属性

public class OrderViewModel
{
    public int OrderID { get; set; }
    public DateTime OrderDate { get; set; }
    public bool IsCollected { get; set; }
    public decimal OrderTotal { get; set; }
    public Student Student { get; set; }
    //add any view specific properties, if needed like IsEditable
}
在命令控制器中

public ActionResult FindOrder(int id)
{

    Order order=DBContext.Orders.FindById(id); // get it from repository

    OrderViewModel viewModel=new OrderViewModel();
    viewModel.Id=order.Id; // etc, etc
    //Do this mapping with AutoMapper, recommended

    return View(viewModel);
}
在Views/Order/FindOrder.cshtml中

@model OrderViewModel 

<div id="order-details">

    @using (Html.BeginForm("SaveOrder", "Order", FormMethod.Post, new { @id = "form-orderInfo"}))
    {

     <label>Name</label>
     @Html.TextBoxFor(m => m.Name, new { @id = "order-name" })
     <!-- etc -->

    }
</div>


public ActionResult SaveOrder(OrderViewModel model)
{
 Order order= prepare this from OrderViewModel object. Use AutoMapper
}           
@model orderview模型
@使用(Html.BeginForm(“SaveOrder”、“Order”、FormMethod.Post、new{@id=“formorderinfo”}))
{
名称
@TextBoxFor(m=>m.Name,新的{@id=“ordername”})
}
公共操作结果保存订单(OrderViewModel模型)
{
Order Order=从OrderViewModel对象准备此项。使用AutoMapper
}           

了解您想要显示的具体内容

?什么是最终视图到目前为止,您的视图中有什么,或者您只是不确定如何开始?您的视图模型只是域模型的组合,而它应该是其他视图模型的组合。因此
Student
应该有一个视图模型(即
StudentModel
)。其他属性的计数相同。你的解决方案不能完全解决这个问题。
public class OrderViewModel
{
    public int OrderID { get; set; }
    public DateTime OrderDate { get; set; }
    public bool IsCollected { get; set; }
    public decimal OrderTotal { get; set; }
    public Student Student { get; set; }
    //add any view specific properties, if needed like IsEditable
}
public ActionResult FindOrder(int id)
{

    Order order=DBContext.Orders.FindById(id); // get it from repository

    OrderViewModel viewModel=new OrderViewModel();
    viewModel.Id=order.Id; // etc, etc
    //Do this mapping with AutoMapper, recommended

    return View(viewModel);
}
@model OrderViewModel 

<div id="order-details">

    @using (Html.BeginForm("SaveOrder", "Order", FormMethod.Post, new { @id = "form-orderInfo"}))
    {

     <label>Name</label>
     @Html.TextBoxFor(m => m.Name, new { @id = "order-name" })
     <!-- etc -->

    }
</div>


public ActionResult SaveOrder(OrderViewModel model)
{
 Order order= prepare this from OrderViewModel object. Use AutoMapper
}