通过父剃刀视图保存子对象值?

时间:2011-10-23 21:38:20

标签: asp.net-mvc-3

您如何在父级的编辑视图中正确保存子(包含)值?该值正确显示但不会保存?

    @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; }
    }

1 个答案:

答案 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听起来像一个简单的类型)。