2014-01-07 51 views
0

我有一个视图(实际上是一个编辑器模板),用于输入父对象的子集合中的每个项目。asp.net mvc - 更改视图中的默认属性值

伪代码:

public class MyParent { 
    public int MyParentID; 
    public virtual ICollection<MyChild> Children; 
} 

我有一些jQuery的是动态正在呼叫在控制器的方法和加入我到DOM局部视图。为了使模型结合工作中,HTML需要看起来像这样:

<input name="Parent[0].PropertyA ... /> 

但控制器总是返回此:

<input name="PropertyA ... /> 

...等模型结合将无法绑定子元素放入子集合中。

我开始对返回的HTML进行一些javascript/jQuery操作,以手动插入“Parent [0]”。到名称属性中。我仍然可以这样做,但它非常冗长。

我想到了另一个想法...视图允许您操纵HTML输出。例如,如果我把这个放在我看来:

@Html.HiddenFor(r => r.PropertyA, new { random="myRandomValue"}) 

...它会添加一个随机属性。所以我试图做到这一点:

@Html.HiddenFor(r => r.PropertyA, new { name="Parent[0].PropertyA"}) 

但它不会改变名称属性。看起来这个HiddenFor的重载只会增加额外的属性,但不会改变默认属性。

我的问题:是否有一种干净的方式来改变'name'属性,以便输出将与回发时的模型绑定一起使用?

+0

这不是一个答案(实际上是在自我宣传,所以我希望这条评论不会持续很长时间),但我写了这个HTTP ://formfactory.apphb.com/而不是EditorTemplates。它正确处理集合。 – mcintyre321

回答

0

请尝试以下方法来覆盖的name属性:

@Html.HiddenFor(r => r.PropertyA, new { @Name="Parent[0].PropertyA"}) 
+0

是的,这工作!奇怪的是,我已经尝试了@name,而这并没有奏效。所以这个结果令我惊讶,因为属性的默认输出是“name”,而不是“Name”。 无论哪种方式,这是现在的工作,非常感谢你! – ChadSC