MVC HTML 助手:获取所有验证属性

MVC HTML Helpers: Get all validation attributes

在制作自定义助手时,我们如何获取验证属性(客户端验证)的值?例如内置的助手会做这样的事情:

<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 没有任何 属性。这怎么可能呢?

the values like the error message, etc, are exactly what I need.

正如 Stephan 在他的评论中所说,您不必在获取此类数据注释属性的值之后继续,因为这将是唯一且唯一的重复工作。如果你真的想将你的表单封装在一个单独的助手中,那为什么不重新使用漂亮的内置助手呢?

举例说明我的意思:

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