【问题标题】:MVC HTML Helpers: Get all validation attributesMVC HTML Helpers:获取所有验证属性
【发布时间】:2015-06-15 22:56:04
【问题描述】:

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

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

【问题讨论】:

  • 为什么在自定义助手中需要它?你到底想做什么?
  • @StephenMuecke:尝试制作 Bootsrap 助手以节省时间,以便我可以将标签、字段和验证消息包装在一个助手中。
  • 也许编辑您的问题以说明 - 您不需要 “验证属性的值” - 您在自定义帮助程序中使用现有帮助程序。
  • @StephenMuecke:错误信息等值正是我所需要的。我可以从元数据而不是值中确定 IsRequired!
  • @StephenMuecke:我想我也无法让它们脱离模型状态,因为我需要客户端验证。

标签: c# asp.net-mvc validation html-helper


【解决方案1】:

错误信息等值正是我所需要的。

正如 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2012-06-13
    • 1970-01-01
    • 2011-02-11
    相关资源
    最近更新 更多