【发布时间】:2012-05-11 11:31:11
【问题描述】:
我在 MVC3 应用程序中遇到一种情况,我希望能够在一些由帮助程序 (DropDownList) 生成的 html 上设置 name 属性。
看来这是不可能的。显然,助手会默默地覆盖您为传递给助手的 html 属性对象中的 name 属性指定的任何值。
在我浪费太多时间尝试与现有助手合作之前,我想确认一下。
而且,顺便说一句,如果设计上不可能......我认为这是 MVC 框架中的一个愚蠢的限制。是的,我知道分配错误的名称属性会破坏自动模型绑定。但是当我需要的时候,我应该能够做到这一点。毕竟,我总是可以使用我选择的任何名称属性来编写原始 html。帮助者应该提供帮助,而不是束手无策。
编辑讨论编辑器模板是否维护导航上下文
Darin,我正在使用编辑器模板(我通常使用术语“部分”,因为编辑器模板是一种特殊的部分视图)。
编辑器模板做修改 HtmlFieldPrefix -- 这就是我注意到我有问题的方式:)。我正在使用这样的电话:
// call in higher level partial - context is 'eae'
@Html.EditorFor(m => m.Value)
...
// inside editor template for typeof(Value) context is 'eae:Value'
需要上下文转换来保持默认绑定机制正常工作。我使用了一种不同的方法,我希望上下文在整个调用链中保持固定(即,当执行深入到更深的部分时,我希望上下文保持不变)。
【问题讨论】:
-
我想您使用的是 DropDownListFor 而不是 DropDownList,对吗? DropDownList 确实允许您指定名称
-
尼克,我正在使用 DropDownList(来自自定义帮助程序,它自动从我的数据层创建选择列表)。但是,您在调用 DropDownList 时指定的名称值会使用当前的 ViewData.TemplateInfo.HtmlPrefix 进行修饰。您不能通过指定包含 name=... 属性的 html 属性对象来覆盖它。
标签: asp.net-mvc