Asp.net 如何在Razor中访问视图中的数据?
在标准WebForms中,我会有一些属性,并设置它们。然后网页将绑定到它们,例如使用Asp.net 如何在Razor中访问视图中的数据?,asp.net,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc 3,Razor,在标准WebForms中,我会有一些属性,并设置它们。然后网页将绑定到它们,例如使用 我知道MVC是一种不同的方法,但同时显示来自多个源的数据仍然有基本的需求 我可以看到,如果我使用@Model,它将访问控制器中的数据集。但是,如果要显示来自2个或3个单独项目的数据,该怎么办 如果我想在同一页面上显示客户,他们的地址和当前订单,是否有办法将这3个单独的模型传递到一个视图,或者我需要为每个视图创建一个局部视图,然后将它们全部显示在同一页面上?您要做的是在模型上创建一个集合,以包含三个客户模型。当我
我知道MVC是一种不同的方法,但同时显示来自多个源的数据仍然有基本的需求
我可以看到,如果我使用@Model
,它将访问控制器中的数据集。但是,如果要显示来自2个或3个单独项目的数据,该怎么办
如果我想在同一页面上显示
客户
,他们的地址和当前订单,是否有办法将这3个单独的模型传递到一个视图,或者我需要为每个视图创建一个局部视图,然后将它们全部显示在同一页面上?您要做的是在模型上创建一个集合,以包含三个客户模型。当我们谈论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
}
公共类MyViewModel{
私人客户名单;
公开名单客户{
得到{
退回客户;
}
}
//其他视图模型属性和方法
}
您要做的是在您的模型上创建一个集合,以包含三个客户模型。当我们谈论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
}
公共类MyViewModel{
私人客户名单;
公开名单客户{
得到{
退回客户;
}
}
//其他视图模型属性和方法
}
这些项目相关吗?如果是,那么考虑创建一个视图模型,它是每个模型的集合:
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
这些项目相关吗?如果是,那么考虑创建一个视图模型,它是每个模型的集合:
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
拥有一个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
}
您的视图将是强类型tpCustomerServiceWModel
@model CustomerViewModel
<p>@Model.Name</p>
<p>@Model.Address.AddressLine1</>
@foreach(var item in Model.Orders)
{
<p>@item.OrderID</p>
}
@model客户服务模型
@型号.名称
@Model.Address.AddressLine1
@foreach(模型订单中的var项目)
{
@item.OrderID
}
有一个视图模型
,它将所有这些数据(类)作为属性保存并返回到视图中
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
}
您的视图将是强类型tpCustomerServiceWModel
@model CustomerViewModel
<p>@Model.Name</p>
<p>@Model.Address.AddressLine1</>
@foreach(var item in Model.Orders)
{
<p>@item.OrderID</p>
}
@model客户服务模型
@型号.名称
@Model.Address.AddressLine1
@foreach(模型订单中的var项目)
{
@item.OrderID
}
所以我假设GetAddress和GetOrders是控制器中的属性?如果调用RenderAction,它们应该是控制器中的操作(也就是说,如果它们真的是分开的东西——订单应该是分开的,但我不太确定地址。我宁愿将地址作为ViewModel的一部分,并通过RenderAction
@Matt将订单分开呈现,而且订单可以(也可能应该)在它们自己的控制器中(因为它们是独立的资源)。在这种情况下,如果我遵循您建议的模式,是我将两个控制器链接到一个视图,还是您建议将一个视图嵌套在另一个视图中/作为部分?@Matt RenderAction允许您从一个视图调用不同的控制器,而不必知道该视图中插入了什么。因此我假设GetAddress和GetOrders是控制器中的属性吗?@Matt如果调用RenderAction
(也就是说,如果它们真的是分开的东西——订单应该是分开的,但我不太确定地址。我宁愿将地址作为ViewModel的一部分,并通过RenderAction
@Matt将订单分开呈现,而且订单可以(也可能应该)在它们自己的控制器中(因为它们是独立的资源)。在这种情况下,如果我遵循您建议的模式,是我将两个控制器链接到一个视图,还是您建议将一个视图嵌套在另一个视图中/作为部分?@Matt渲染允许您从一个视图调用不同的控制器,而不必知道该视图插入了什么。您和George都有same解决方案和相同的投票,但我认为你是第一个,谢谢。@Matt这没关系,但如果你悬停在时间戳上(在撰写本文时,昨天的:我比Shyju快42秒).你和乔治都有相同的解决方案和相同的投票,但我想你是第一个,谢谢。@Matt这没关系,但如果你悬停在时间戳上(在撰写本文时,昨天的:我比Shyju快42秒)。