【问题标题】:How can I use EditorFor with ViewData as source?如何使用 EditorFor 和 ViewData 作为源?
【发布时间】:2018-03-20 19:51:15
【问题描述】:

我在我的控制器上设置了一个 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 =&gt; m.Services)的原因。

【问题讨论】:

  • 您的 Services.cshtml 需要收集?
  • @EhsanSajjad:看起来更新的问题
  • 你试过了吗:@Html.EditorFor(x=&gt; item)
  • 是的,但它不会呈现正确的列表。 id 只指同名/id。
  • 那么让我们等待更多的专家来阐明:)

标签: asp.net-mvc viewdata


【解决方案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" ... />

等(即以Viewdata键为前缀),因此POST方法需要包含与ViewData键同名的参数才能正确绑定

IEnumerable<Services> Registrations_Services

话虽如此,您正在编辑数据,因此您应该始终在您的视图中使用视图模型,而不是数据模型,并且视图模型将包含 IEnumerable&lt;Services&gt; Services 属性,从而使您可以使用ViewData 没有必要。

【讨论】:

  • 附带说明,您应该使用@Html.LabelFor(m =&gt; m.Enabled, Model.Description, new { @class = "control-label col-md-2" }) 将您的标签与复选框相关联
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-30
  • 1970-01-01
相关资源
最近更新 更多