我在控制器上设置了一个ViewData,例如:
ViewData["Registrations_Services"] = GetServices(); // return a List<Services>
然后,我想在我的视图中显示它。之前,我正在使用模型迭代:
@Html.EditorFor(m => m.Services)
但是现在我怎么能从ViewData做同样的事情呢?试过:
@foreach (var item in ViewData["Registrations_Services"] as IList<MyProject.Models.Services>)
{
@Html.EditorFor(item)
}
但是类型参数是不同的,当然它不起作用。
也试过:
@Html.EditorFor(m => ViewData["Registrations_Services"] as IList<MyProject.Models.Services>)
但它说
模板只能用于字段访问,属性访问,单维数组索引或单参数自定义索引器表达式。
我需要为每个项目应用编辑器模板Services.cshtml
:
<div class="form-group">
@Html.Label(Model.Description, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-6 checkbox">
@Html.HiddenFor(m => m.Id)
@Html.HiddenFor(m => m.Name)
@Html.HiddenFor(m => m.RegistrationId)
@Html.HiddenFor(m => m.Description)
@Html.EditorFor(m => m.Enabled)
</div>
<div class="col-md-4"></div>
</div>
这就是我使用@Html.EditorFor(m => m.Services)
的原因。
答案 0 :(得分:1)
您可以使用ViewData
键的名称
@Html.Editor("Registrations_Services")
请注意,这将生成
<input name="Registrations_Services[0].Id" ... />
<input name="Registrations_Services[0].Name" ... />
....
<input name="Registrations_Services[1].Id" ... />
<input name="Registrations_Services[1].Name" ... />
etc(即以Viewdata
键为前缀),因此POST方法需要包含一个与ViewData
键同名的参数才能正确绑定
IEnumerable<Services> Registrations_Services
话虽如此,您正在编辑数据,因此您应该始终使用视图模型,而不是视图中的数据模型,并且视图模型将包含IEnumerable<Services> Services
属性,您使用ViewData
不必要。