Asp.Net MVC Razor视图编辑器模板-在每次迭代之间传递变量
本文关键字:迭代 之间 变量 Razor MVC Net 视图 编辑器 Asp | 更新日期: 2023-09-27 17:49:51
如果我在Razor视图中使用一个重复表行的编辑器模板,我是否可以将一个变量从编辑器模板的一个迭代传递到下一个迭代?
例如-我的模型可能有:
CarType
CarTypeDesc
CarModel
我的观点是:
<table>
@Html.EditorFor(m => m.CarList)
</table>
理想情况下,我想有一个标题的CarType和CarModels的列表下,例如:
Type1 - this is the description of type 1
CarModel1
CarModel2
CarModel3
Type1 - this is the description of type 2
CarModel4
CarModel5
Type3 - this is the description of type 3
CarModel6
我只能得到那个视图,如果我的模板知道之前的CarType是什么。
谢谢你的建议,
马克我建议更改您的视图模型来表示不同视图的关注点,因此您的模型看起来像:
string CarType { get; set; }
string CarTypeDesc { get; set; }
IEnumerable<CarModel> CarModels { get; set; }
这样就不需要您的视图模型知道前面的模型,并且更紧密地遵循MVVM模式。
这可以通过为这些属性创建自定义模板来实现:
<table>
@for (int i = 0; i <= Model.Count; i++)
{
Html.EditorFor(m => Model[i].CarType, "CarTypeTemplate");
Html.EditorFor(m => Model[i].CarModel, "CarModelTemplate");
}
</table>
如果你的CarType
或CarModel
有特定的数据/类类型,你可以创建与这些类型同名的编辑器模板,例如Views/Shared/EditorTemplates/CarType.cshtml
。Razor会使用这些模板来呈现你的属性。那么您可以保留原来的@Html.EditorFor(m => m.CarList)
调用。例如,在这些模板中,可以为包含CarModel
的<td>
创建<tr>
元素和padding-left: 20px;
元素。