【问题标题】:Using ASP.NET MVC ValidateFor HTML helper together with unobtrusive validation使用 ASP.NET MVC ValidateFor HTML 助手和不显眼的验证
【发布时间】:2012-12-28 14:27:59
【问题描述】:
  1. 是否可以将 Html.ValidateFor 与不显眼的验证一起使用?我希望能够做到以下几点:



    @Html.TextBoxFor(m => m.Title)


    @{ Html.ValidateFor(m => m.Age); }

  2. 为什么在启用非侵入式验证时禁用 ValidateFor?什么是同时使用两者的简单方法?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4


    【解决方案1】:

    我添加了一个 HTML 扩展方法,它将检查模型元数据并生成所有 data-val* 属性(供 jquery.unobtrusive.validation 使用)。

    这样我可以完全控制控件的呈现方式(有时 Html.*For 系列方法会产生不适合我需要的名称和 id 属性,添加额外的参数可能会变得笨拙)。

    注意,您仍然需要在表单元素内拥有input 控件(jquery.unobtrusive.validation 需要)。

    public static MvcHtmlString Validation<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, TProperty>> expression) {
        ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, html.ViewData);
        IDictionary<string, object> dataValAttrs = html.GetUnobtrusiveValidationAttributes(ExpressionHelper.GetExpressionText(expression), metadata);
    
        StringBuilder stringBuilder = new StringBuilder();
        foreach (var dataValAttr in dataValAttrs) {
            stringBuilder.Append(' ').Append(dataValAttr.Key).Append("=\"").Append(dataValAttr.Value).Append('"');
        }
        return new MvcHtmlString(stringBuilder.ToString());
    }
    

    以下是如何使用此方法:

    <textarea name="Description" class="input-block-level" @Html.Validation(m => m.FormData.Description)></textarea>
    @Html.ValidationMessage("Description")
    

    请注意,您不能在这里使用Html.ValidationMessageFor 版本,因为它会创建名称FormData_Description,这与我在这种情况下想要的Description 不同(用于将POST 操作绑定到FormData 对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 2015-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多