是否可以将 Html.ValidateFor 与不显眼的验证一起使用?我希望能够做到以下几点:
< !-- 我想使用 data-val* 属性指定验证 -->
< input type="text" data-val-required/>< !-- 我想使用 HTML 助手通过视图模型属性注入 data-val* 属性 -->
@Html.TextBoxFor(m => m.Title)< !-- 我也希望自己能够渲染输入控件,但也包括来自视图模型属性的验证,并且也吃掉它 -->
@{ Html.ValidateFor(m => m.Age); }为什么在启用不显眼的验证时禁用 ValidateFor?什么是同时使用两者的简单方法?
问问题
4427 次
1 回答
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 对象。
于 2013-01-14T21:03:10.673 回答