【问题标题】:How to Combine two models into a single model and pass it to view using asp.net MVC razor如何将两个模型组合成一个模型并使用 asp.net MVC razor 将其传递给查看
【发布时间】:2014-03-13 03:53:32
【问题描述】:

我正在尝试将两个模型(tblCategories 和 tblProducts)组合成一个模型并将其传递给视图。但是没办法。

tblCategory.cs主要模型有以下数据

namespace ScaffoldCreate.Models
{
    using System;
    using System.Collections.Generic;

    public partial class tblCategory
    {
        public int CategoryId { get; set; }
        public string Name { get; set; }
    }
}

tblProduct.cs

public partial class tblProduct
    {
        public int ProductId { get; set; }
        public int ProductName { get; set; }
        public int CategoryId { get; set; }
        public int SubCategoryId { get; set; }
        public string ProductDescription { get; set; }
        public string StockStatus { get; set; } 
        public IList<tblCategory> CategoryName { get; set; }
    }
}

我尝试将 tblCategory 放入 tblProduct 并尝试在索引页面中检索它,如下所示:

@foreach (var item in Model) {
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryName.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SubCategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductDescription)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.StockStatus)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}

但是,我无法通过它。任何人都可以帮助我解决这个问题吗?

【问题讨论】:

  • item.chandu.CategoryName 中的 chandu 是什么?
  • 嘿,抱歉打错了!我更新了最新的代码。谢谢!
  • 不确定,但我认为您可能需要创建另一个扁平化视图模型,其中包含您提到的两个模型的所有属性

标签: asp.net-mvc razor view model


【解决方案1】:

为您的视图使用 ViewModel 将解决您的问题::

class CommonViewModel 
{

   Model1 model1;
   Model2 model2;
}

其中 Model1 和 Model2 是您的模型 aS::

public class Model1 
{
  public int ID{get;set;}
  public string Name{get;set;}
}

和 Model2 类似::

public class Model2 
{
  public int ID{get;set;}
  public string Name{get;set;}
}

在您的视图中,您可以使用强类型::

@model ProjectName.CommonViewModel

在这里您可以将 Model1 用作:: 您也可以将模型传递给另一个部分视图,也可以在同一个视图中使用::

@Html.Partial("_PartialViewName",Model.Model1)

@foreach (var item in Model.Model2)
{
    <tr>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryName.Name)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.CategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.SubCategoryId)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductName)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.ProductDescription)
        </td>
        <td>
            @Html.DisplayFor(modelItem => item.StockStatus)
        </td>
        <td>
            @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) |
            @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })
        </td>
    </tr>
}

【讨论】:

  • Rahul,如果您可以添加有关如何使用剃须刀代码访问多个模式的视图代码,那就太好了。
  • @Chandana 如果它有帮助,那么你应该评价答案
  • @Rahul 我可以问你控制器中应该包含什么,如果可能,请编辑。真的谢谢你
猜你喜欢
  • 2011-05-08
  • 2015-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多