【发布时间】:2014-03-05 15:36:24
【问题描述】:
我的模型是另一个模型的列表,例如 ModelList : ModelSingle 在我的剃刀视图中,我正在使用
@model somenamespace.ModelList
@Html.EditorForModel()
这会遍历每个 ModelSingle 并返回一个对 ModelSingle 进行强类型化的 EditorTemplate。
@model somenamespace.ModelSingle
@using(Html.BeginForm("Action", "Controller", FormMethod.Post, new { id = "formname" + Model.ID}))
{
@Html.AntiForgeryToken()
@Html.EditorFor(p => p.SomeField)
@Html.EditorFor(p => p.AnotherField)
}
这些模板中的每一个都包含一个可用于编辑单个模型的表单。这些是单独发布的,我的控制器方法期望
public ActionResult(ModelSingle model)
我遇到的问题是模型没有正确绑定。使用这样的模型
public class ModelSingle()
{
public string SomeField { get; set; }
public string AnotherField { get; set; }
}
EditorTemplate 被告知它是列表的一部分,所以我得到了
<Form>
<input name="[0].SomeField"/>
<input name="[0].AnotherField"/>
<input type="submit" value="Update"/>
</Form>
我不能简单地绑定到 ModelList,因为它没有命名 ModelList[0].SomeField,即使它是我认为除了第一个项目之外其他任何东西都不起作用。
有没有办法让 EditorTemplate 忽略它的模型是列表的一部分这一事实,或者强制 DropDownListFor、EditorFor 等......只使用字段名称而不添加 [i]。
我知道我可以强制执行 Name="SomeField" 更改,但我希望有一个解决方案能够反映 Model 类本身所做的任何更改。
编辑 - 按要求添加了正在使用的 View 和 EditorTemplate 的简化示例。
【问题讨论】:
-
你能在视图和模板的顶部显示@model 标签吗?
标签: c# asp.net-mvc asp.net-mvc-4 razor