有人可以提供代码,允许[]被使用,以便保存包含在一个@模型中的集合?
编辑视图:
@model MVC3.Models.A
// I need to save collection values but can't use [] here to setup model binding.
@Html.EditorFor(model => model.Bs[0].Val)
模型:
public class A
{
public A()
{
this.Bs = new HashSet<B>();
}
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; }
}
问题是您的属性是ICollection<T>
,它不提供索引访问元素。
将其更改为IList<T>
或仅List<T>
,您可以像在第一个示例中一样编写视图代码。
如果由于某种原因您不能更改属性类型,那么您需要为您的特定视图创建一个专门的视图模型,然后将其映射到控制器POST操作中的A
模型。
input
元素,正如Phil Haack所描述的,即:
<input type="text" name="ints" value="1" />
<input type="text" name="ints" value="4" />
<input type="text" name="ints" value="2" />
<input type="text" name="ints" value="8" />
但这只适用于简单的类型,即原语或字符串,而不是像B
这样的复杂类型。
最后一个注释:如果你使用的是编辑器模板,你通常可以绑定到整个集合,MVC框架会找出如何把它重新组合在一起,就像:
@Html.EditorFor(m => m.Bs);
当然,这使您无法控制
编辑器模板之间的内容,因此,如果您试图为它们生成<li>
元素或类似的东西,那么您必须将其直接嵌入编辑器模板中,这可能意味着创建一个专门用于此集合绑定的自定义编辑器模板,并使用相应的覆盖EditorFor
(采用模板名称的那个)。
这有点痛苦,但如果到目前为止您一直在UI和数据层之间共享类,则可能比尝试切换到并行模型系统要少得多。