假设我有一个这样的模型:
但那也不起作用。使用该方法,我得到了以下结果:
我认为这不起作用是因为有一个多余的句号(
注意: 这是对我的真实情况的严重简化。 我知道对于如此简单的事情,最好的方法可能是为我的视图中的
public class Foo {
public List<Bar> Bars { get; set; }
public string Comment { get; set; }
}
public class Bar {
public int Baz { get; set; }
}
我希望有一个视图可以让用户编辑Bar
项目,但是有一个限制:我想用局部视图来处理Bar
的编辑。
@model Web.ViewModels.Foo
@using(Html.BeginForm()) {
@Html.Partial("_EditBars", Model.Bars)
@Html.TextAreaFor(m => m.Comment)
...
}
_EditBars
局部视图的外观如下:
@model List<Web.ViewModels.Bar>
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(m => Model[i].Baz)
}
我希望这个模型能够绑定到我的操作,大致如下:
[HttpPost]
public ActionResult Edit(Foo foo) {
// Do stuff
}
很遗憾,我正在发布的数据没有对Bars
属性进行建模绑定:
[1].Baz=10&[0].Baz=5&Comment=bla
这样做没有效果是有道理的,因为它缺少了Bars
前缀。如果我理解正确,我需要这样做:
Bars[1].Baz=10&Bars[0].Baz=5&Comment=bla
所以,我尝试了这种方法:
@Html.Partial(
"_EditBars",
Model.Bars,
new ViewDataDictionary(ViewData)
{
TemplateInfo = new TemplateInfo
{
HtmlFieldPrefix = "Bars"
}
})
但那也不起作用。使用该方法,我得到了以下结果:
Bars.[1].Baz=10&Bars.[0].Baz=5&Comment=bla
我认为这不起作用是因为有一个多余的句号(
Bars.[1]
和 Bars[1]
). 有什么办法可以得到我想要的结果吗?注意: 这是对我的真实情况的严重简化。 我知道对于如此简单的事情,最好的方法可能是为我的视图中的
Bar
制作一个EditorTemplate
并使用EditorFor
循环。 如果可能的话,我想避免这种解决方案。