您如何在父级的编辑视图中正确保存子(包含)值?该值正确显示但不会保存?
@model MVC3.Models.A
@Html.EditorFor(model => model.Bs.First().Val)
public class A
{
public int Name { get; set; }
public virtual ICollection<B> Bs { get; set; }
}
public class B
{
public int Val { get; set; }
public virtual A A { get; set; }
}
答案 0 :(得分:1)
直接的答案是使用数组表示法引用子对象(当然,假设Children
是实现IList
的东西):
@Html.EditorFor(model => model.Children[0].Val)
如果您打算为所有Children
提供编辑器,最好为该类型定义编辑器模板,并使用@Html.EditorFor(model => model.Children)
而不是使用集合中的每个元素显示编辑器一个循环。
修改:已更正ICollection
而非IList
错误。
<强>更新强>
如果您的集合仅实现ICollection
(因此不可索引),那么您应该考虑使用ViewModel(公开IList
)而不是您当前使用的模型,以使上述有效
如果这不是一个选项,那么你可以考虑这个黑客:
// essentially creating the correct name manually
@Html.TextBox(Html.NameFor(m => m.Children) + "[0].Val",
model.Children.First().Val)
当然,这使您无法自动使用您可能拥有的任何编辑器模板,但在您的情况下这可能不是问题(特别是考虑到Val
听起来像一个简单的类型)。