我正在尝试创建一个HtmlHelper,它将创建与Bootstrap兼容的表单字段.我的第一个目标是创建一个HtmlHelper来创建周围的div:
<div class="control-group"> ... </div>
Run Code Online (Sandbox Code Playgroud)
遵循这里的优秀建议,并在这里我设法让它相对快速地工作.但它并不总是奏效.
我有一个具有复杂属性的ViewModel,所以在我的表单中我访问该字段m=>m.Complex.Element
.在我的助手中,我检查元素是否有验证错误.我用ModelMetadata.FromLambdaExpression(expression, html.ViewData)
.我得到的元数据有属性名称Element
,而不是Complex.Element
.
当我检查ModelState的这个属性时,我找不到它,因为ModelState保留了全名 - Complex.Element
.
我可以寻找部分匹配,希望没有其他元素,但这似乎是一个令人讨厌的错误等待发生.如何从表达式中获取完整的属性名称?
zmb*_*mbq 29
MVC消息来源是公开的,这是一件好事.获取ModelState属性名称的正确方法是使用
var propertyName = ExpressionHelper.GetExpressionText(expression);
Run Code Online (Sandbox Code Playgroud)
之前我已经使用以下内容来获取当前模型,但您可能必须将属性名称附加到此属性以获取该属性.
ViewContext.ViewData.TemplateInfo.HtmlFieldPrefix;
Run Code Online (Sandbox Code Playgroud)
否则拉出反射器/ ilspy/whatever并检查你的EditorFor/TextBoxFor或编辑器所做的任何方法.
归档时间: |
|
查看次数: |
5058 次 |
最近记录: |