在标准WebForms中,我会有一些属性,并设置它们。然后网页将绑定到它们,例如<%#CustomerName%>
。
我理解MVC是一种不同的方法,但仍然需要同时显示来自多个源的数据。
我可以看到,如果我使用@Model
,它将访问控制器中的数据集。但是,如果您想显示来自2个或3个单独项目的数据呢?
如果我想在同一页面上显示Customer
,他们的地址和当前订单,有没有办法将这3个单独的模型传递到一个视图,或者是我需要的情况为每个创建一个局部视图,然后将它们全部显示在同一页面上?
答案 0 :(得分:4)
这些物品是否相关?如果是,则考虑创建一个ViewModel,它是每个模型的聚合:
public CustomerViewModel
{
public Customer Customer {get; set;
public AddressViewModel Address {get; set;}
public OrderViewModel Order {get; set;}
}
然后在你看来:
@inherits System.Web.Mvc.WebViewPage<CustomerViewModel>
@model CustomerViewModel
@Model.Customer.Name
@Model.Address.Street
@Model.Order.Name
@model.Order.Date
否则,如果项目不相关,那么您可以使用RenderAction
:
在Customer
视图中:
@Model.Customer.Name
@(Html.RenderAction("GetAddress", "Customer", new { customerId = Model.Customer.Id });)
@(Html.RenderAction("GetOrders", "Order", new { customerId = Model.Customer.Id });)
答案 1 :(得分:4)
有ViewModel
将所有这些数据(类)保存为属性并将其返回到您的视图
public class CustomerViewModel
{
public int ID { set;get;}
public string Name { set;get;}
public Address Address{ set;get;}
public IEnumerable<Order> Orders { set;get;}
public CustomerViewModel()
{
if(Address==null)
Address=new Addres();
if(Orders ==null)
Orders =new List<Order>();
}
}
public class Address
{
public string AddressLine1 { set;get;}
//Other properties
}
public class Order
{
public int ORderID { set;get;}
//Other properties
}
您的GET操作方法
public ActionResult Index(int id)
{
var vm=new CustomerViewModel();
vm.Name=repo.GetUser(id).Name;
vm.Address=repo.GetAddressFromUserID(id);
vm.Orders=repo.GetOrdersFromUser(id);
return View(vm);
}
您的视图将被强类型tp CustomerViewModel
@model CustomerViewModel
<p>@Model.Name</p>
<p>@Model.Address.AddressLine1</>
@foreach(var item in Model.Orders)
{
<p>@item.OrderID</p>
}
答案 2 :(得分:0)
您要做的是在Model
上创建一个包含三个客户模型的集合。当我们在MVC中讨论模型时,将它们视为ViewModels
会很有帮助。也就是说每个视图有一个模型,它将包含该视图的所有数据。
因此,在下面的示例中,您将数据模型中的客户集合设置为视图模型上的属性。您现在可以在视图中(或在Html帮助程序扩展方法中)迭代@Model.Customers
示例强>
public class MyViewModel{
private List<Customer> _customers;
public List<Customer> Customers{
get{
return _customers;
}
}
//Other View Model Properties and Methods
}