如何将两个模型组合成一个模型并使用 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 将其传递给查看的主要内容,如果未能解决你的问题,请参考以下文章
ASP .NET Core 5 Razor Pages:如何正确使用局部视图并验证其模型状态?
AngularJS,如何将多个输入组合成一个 ng 模型?具体来说,将日期、时间和时区输入组合到 datetime 对象中