我有以下视图模型:
public class ViewModel
{
//...
[UIHint("Children")
public IList<ChildViewModdel> Children {get;set;}
}
其中ChildViewModel类具有Quantity属性(long类型)。
这是儿童编辑模板:
@model IList<ChildViewModel>
@for (var index = 0; index < Model.Count(); index++)
{
@Html.EditorFor(x => x[index])
}
现在我按@Html.EditorForModel()
渲染模型,结果是第一个ChildViewModel的Quanity文本框名称为Children.[0].Quantity
。你在[0]之前看到这个额外的点吗?结果模型绑定器无法识别这些值,并且在用户发布表单时不会正确处理它们。如何使ASP.NET MVC rener Children[0].Quantity
名称?
答案 0 :(得分:2)
首先让我说这是一种正确的行为(至少“按设计”)。当MVC潜入嵌套属性时,它会附加“PropertyName”。 (在末尾提到点)在嵌套模型内的每个字段前面。所以你得到“孩子们”。来自ViewModel
,“[0]。”来自IList<ChildViewModel>
的{{1}}和“数量”。
这里的主要问题是为什么需要ChildViewModel
的特殊模板? MVC有自己的特殊情况来处理IEnumerables,所以通常你不应该干涉。
如果您确实需要一些特殊处理,可以将IList<ChildViewModel>
包装到另一个类中,并在该类的EditorTemplate中引入您的特殊逻辑。它就像是:
IList<ChildViewModel>
在这里,它是ChildViewModdels EditorTemplate
中的特殊逻辑public class ViewModel
{
public ChildViewModdels Children {get;set;}
}
public class ChildViewModdels
{
public IList<ChildViewModdel> Children {get;set;}
}
同样,如果您确实需要那个特殊逻辑(这个问题不确定),那就是这种情况。