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是什么。

谢谢你的建议,

马克

Asp.Net MVC Razor视图编辑器模板-在每次迭代之间传递变量

我建议更改您的视图模型来表示不同视图的关注点,因此您的模型看起来像:

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>

如果你的CarTypeCarModel有特定的数据/类类型,你可以创建与这些类型同名的编辑器模板,例如Views/Shared/EditorTemplates/CarType.cshtml。Razor会使用这些模板来呈现你的属性。那么您可以保留原来的@Html.EditorFor(m => m.CarList)调用。例如,在这些模板中,可以为包含CarModel<td>创建<tr>元素和padding-left: 20px;元素。