两个查询,一个视图

时间:2013-07-18 19:28:26

标签: c# asp.net-mvc asp.net-mvc-4 razor

目标

在单个视图中迭代两个查询。

问题

在我的应用程序中,有一个特定产品的比较列表。在页面顶部,有该产品的详细信息,包括其名称,最低/最高价格,照片和其他一些细节。

我需要的是这样的事情:

@modelComparisonList List<MyApp.Models.Products>
@modelProduct MyApp.Models.Products

@{
    ViewBag.Title = "Comparing " + modelProduct.name;
}

<h1>There is @modelProduct.quantity products to compare</h1>   

<table>
    @foreach (var item in modelComparisonList)
    {
        <tr>
            <p>@item.productName</p>
        </tr>
        <tr>
            <p>@item.productPrice</p>
        </tr>
        <tr>
            <p>@item.marketName</p>
        </tr>
    }
</table>

你能理解我的情况吗?

我不知道如何执行解决方案来解决此问题。有人可以给我一个想法吗?

2 个答案:

答案 0 :(得分:8)

只需创建一个包含两者的包装类,即:

public class TheViewModel
{
    public List<MyApp.Models.Products> Item1 { get; set; }
    public MyApp.Models.Products Item2 { get; set; }
}

答案 1 :(得分:1)

是的,您可以使用视图模型来完成。视图模型用于表示视图上的数据。您的视图模型可以是来自多个模型的“连接”。

以下是关于您的课程和属性的一些提示。

您的产品域模型如下所示:

public class Product
{
     public int Id { get; set; }

     public string Name { get; set; }

     public string MarketName { get; set; }

     public decimal Price { get; set; }

     // Other properties not mentioned above
}

您的视图模型可能如下所示:

public class ProductViewModel
{
     public IEnumerable<Product> Products { get; set; }

     public Product Product { get; set; }
}

您的操作方法可能如下所示:

public ActionResult Compare(int id)
{
     ProductViewModel viewModel = new ProductViewModel
     {
          Product = productRepository.GetBuId(id),
          Products = productRepository.GetAll()
     };

     return View(viewModel);
}

您的观点可能如下所示:

@model YourProject.ViewModels.Products.ProductViewModel

@{
     ViewBag.Title = "Comparing " + @Model.Product.Name;
}

<h1>There is @Model.Product.Quantity products to compare</h1>

<table>
     @foreach (var product in Model.Products)
     {
          <tr>
               <td>@product.Name</td>
          </tr>
          <tr>
               <td>@product.Price</td>
          </tr>
          <tr>
               <td>@product.MarketName</td>
          </tr>
     }
</table>

我希望这会有所帮助。