在制作自定义帮助程序时,我们如何获取验证属性的值(客户端验证)?例如,内置帮助程序执行以下操作:
<label class="control-label " for="Starts">Starts</label>
<span class="field-validation-valid text-danger" data-valmsg-for="Starts" data-valmsg-replace="true"></span>
<input class="form-control text-box single-line" data-val="true" data-val-date="The field Starts must be a date." data-val-required="The Starts field is required." id="Starts" name="Starts" type="date" value="" />
<br />
所以现在在我的自定义帮助器中,我应该确定验证类型data-val-date for example
和验证消息。 ModelMetaData
没有任何属性。怎么可以这样做?
答案 0 :(得分:2)
像错误消息等的值正是我所需要的。
正如斯蒂芬在评论中所说的那样,你不必去获取这些数据注释属性的值,因为它只是重复工作而已。如果你真的想把你的表单封装在一个帮助器中,那么为什么不重新使用漂亮的内置助手呢?
为您举例说明我的意思:
public static MvcHtmlString MyFastHelper<T,R>(this HtmlHelper<T> helper, Expression<Func<T,R>> selector, Boolean validate = false){
var Label = LabelExtensions.LabelFor(helper, selector);
var Val = ValidationExtensions.ValidationMessageFor(helper, selector);
var Editor = EditorExtensions.EditorFor(helper, selector, new { htmlAttributes = new { @class = "form-control"} });
if (validate)
{
return new MvcHtmlString(String.Format("{0}\r\n{1}\r\n{2}\r\n</br>", Label.ToHtmlString(), Val.ToHtmlString(), Editor.ToHtmlString()));
}
else
{
return new MvcHtmlString(String.Format("{0}\r\n{1}\r\n</br>", Label.ToHtmlString(), Editor.ToHtmlString()));
}
}
或者,如果您真的对了解这些内置帮助程序的工作原理感兴趣,可以使用dotPeek
等软件深入了解.NET。你可以得到它Here