我正在使用 IClientModelValidator 和海关Html帮助进行清洁客户端验证,以在我的应用中应用css样式。
我找到并实现了有关客户端验证和自定义DataAnnotations的有趣示例。 Docs
当我使用默认助手@ Html.TextBoxFor(m => m.TestCurrency)时,这是完美的!
现在我想在我的自定义DataAnnotations上启用jquery-inputmask。为此,我需要添加一些特定的css类:
(是的,我可以在自定义帮助器中添加我的掩码类,但我有15个助手:VEmailBoxFor,VPasswordFor,VPhoneNumberFor ...通过根据自定义DataAnnotation添加类我将会使用只是一个帮手,真的更容易维护)
public void AddValidation(ClientModelValidationContext context)
{
MergeAttribute(context.Attributes, "data-val", "true");
var errorMessage = FormatErrorMessage(context.ModelMetadata.GetDisplayName());
MergeAttribute(context.Attributes, "data-val-cannotbered", errorMessage);
MergeAttribute(context.Attributes, "class", "currency");
}
当我使用@ Html.TextBoxFor()时,我在输出中找到了“currency”css类,并且客户端验证也正常工作。
<input class="currency" data-val="true" data-val-cannotbered="Red is not allowed!" id="TestCurrency" name="TestCurrency" type="text" value="">
但是,默认样式不是很好,不是吗?
就像我说的那样,我创建了帮助适合引导程序的助手。其中一个看起来像:
public static IHtmlContent VTextBoxFor<TModel, TResult>(this IHtmlHelper<TModel> helper, Expression<Func<TModel, TResult>> expression, object attributes)
我添加了所有的css类,最后我像这样渲染文本框:
return helper.TextBoxFor(expression, attributes);
现在我的问题出现了:
<input class=" validate form-control " data-val="true" data-val-cannotbered="Red is not allowed!" id="TestCurrency" name="TestCurrency" type="text" value="">
我可以从Expression<Func<TModel, TResult>> expression
获取“验证”/“html”属性吗?
很抱歉这篇很长的帖子,但这对我来说有点棘手。我希望足够清楚。
谢谢大家