Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 如何在Razor中访问视图中的数据?_Asp.net_Asp.net Mvc 3_Razor - Fatal编程技术网

Asp.net 如何在Razor中访问视图中的数据?

Asp.net 如何在Razor中访问视图中的数据?,asp.net,asp.net-mvc-3,razor,Asp.net,Asp.net Mvc 3,Razor,在标准WebForms中,我会有一些属性,并设置它们。然后网页将绑定到它们,例如使用 我知道MVC是一种不同的方法,但同时显示来自多个源的数据仍然有基本的需求 我可以看到,如果我使用@Model,它将访问控制器中的数据集。但是,如果要显示来自2个或3个单独项目的数据,该怎么办 如果我想在同一页面上显示客户,他们的地址和当前订单,是否有办法将这3个单独的模型传递到一个视图,或者我需要为每个视图创建一个局部视图,然后将它们全部显示在同一页面上?您要做的是在模型上创建一个集合,以包含三个客户模型。当我

在标准WebForms中,我会有一些属性,并设置它们。然后网页将绑定到它们,例如使用

我知道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
}
您的视图将是强类型tp
CustomerServiceWModel

@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
}
您的视图将是强类型tp
CustomerServiceWModel

@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秒)。