MVC:使用Helper设置名称属性

时间:2012-05-10 16:32:09

标签: asp.net-mvc

我在MVC3应用程序中有一种情况,我希望能够在帮助程序生成的某些html上设置name属性(DropDownList)。

看来这是不可能的。显然,帮助程序会无提示地覆盖您为传递给帮助程序的html属性对象中的name属性指定的值。

在我浪费太多时间尝试与现有助手合作之前,我想确认一下。

而且,顺便说一句,如果设计不可能......我认为这是MVC框架中的一个愚蠢的限制。是的,我知道分配错误的name属性可能会破坏自动模型绑定。但是,当我需要时,我应该能够做到这一点。毕竟,我总是可以使用我选择的任何名称属性来编写原始html。帮助者应该帮助,而不是束缚。

编辑以讨论编辑器模板是否维护导航上下文

达林,我正在使用编辑器模板(我一般使用术语“部分”,因为编辑器模板是一种特殊的局部视图)。

编辑模板执行修改HtmlFieldPrefix - 这就是我注意到我遇到问题的方法:)。我正在使用这样的电话:

// call in higher level partial - context is 'eae'
@Html.EditorFor(m => m.Value)
...
// inside editor template for typeof(Value) context is 'eae:Value'

需要进行上下文转换以保持默认绑定机制正常工作。我正在使用一种不同的方法,我希望上下文在部分调用链中保持固定(即,当执行深入到更深的部分时,我希望上下文保持不变)。

1 个答案:

答案 0 :(得分:1)

这是设计的。 HTML帮助程序不允许您覆盖name属性。它们根据您的视图模型生成名称,以便默认模型绑定器能够在提交表单时根据完善的约定正确绑定值。

  

而且,顺便说一句,如果设计不可能......我认为这是一个   MVC框架中的愚蠢限制。

您可以在MS Connect上打开票证,并希望在未来版本的框架中可能会发生这种情况。在此之前,您还可以编写自己的自定义帮助程序,以便在需要此类功能时覆盖案例的name属性。就个人而言,到目前为止我从未需要它,但我相信你有正当理由。另一种可能性是在服务器上编写自定义模型绑定器。