如何将两个模型组合成一个模型并使用 asp.net MVC razor 将其传递给查看

Posted

技术标签:

【中文标题】如何将两个模型组合成一个模型并使用 asp.net MVC razor 将其传递给查看【英文标题】:How to Combine two models into a single model and pass it to view using 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 是什么? 嘿,抱歉打错了!我更新了最新的代码。谢谢! 不确定,但我认为您可能需要创建另一个扁平化视图模型,其中包含您提到的两个模型的所有属性 【参考方案1】:

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

class CommonViewModel 


   Model1 model1;
   Model2 model2;

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

public class Model1 

  public int IDget;set;
  public string Nameget;set;

和 Model2 类似::

public class Model2 

  public int IDget;set;
  public string Nameget;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 我可以问你控制器中应该包含什么,如果可能,请编辑。真的谢谢你

以上是关于如何将两个模型组合成一个模型并使用 asp.net MVC razor 将其传递给查看的主要内容,如果未能解决你的问题,请参考以下文章

将多个 Falcor 数据源组合成单个模型

ASP .NET Core 5 Razor Pages:如何正确使用局部视图并验证其模型状态?

AngularJS,如何将多个输入组合成一个 ng 模型?具体来说,将日期、时间和时区输入组合到 datetime 对象中

如何有条件地将多个模型映射到 ASP.NET Core Identity 中的一个表(AspNetUsers)?

将多个模型传递给 ASP.NET MVC 中的视图

如何使用 ASP.NET MVC3 编辑嵌套模型