如何在Razor中查看视图中的数据?

时间:2012-07-24 17:04:02

标签: asp.net asp.net-mvc-3 razor

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

我理解MVC是一种不同的方法,但仍然需要同时显示来自多个源的数据。

我可以看到,如果我使用@Model,它将访问控制器中的数据集。但是,如果您想显示来自2个或3个单独项目的数据呢?

如果我想在同一页面上显示Customer,他们的地址和当前订单,有没有办法将这3个单独的模型传递到一个视图,或者是我需要的情况为每个创建一个局部视图,然后将它们全部显示在同一页面上?

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
}