Я работаю над чистой проверкой клиента с помощью IClientModelValidator и Customs Html Helpers , чтобы применить стиль CSS в моем приложении.
Я нашел и реализовал этот интересный пример о проверке клиента и пользовательских DataAnnotations.
ASP.Net Core MVC - проверка на стороне клиента для пользовательского атрибута
Это прекрасно, когда я использую помощник по умолчанию @ Html.TextBoxFor (m => m.TestCurrency)!
Теперь я хочу включить jquery-inputmask в моих пользовательских DataAnnotations. Для этого мне нужно добавить какой-то определенный класс 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 (), я обнаружил класс css "currency" в выводе, и проверка клиента также работает.
<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="">
- Стиль выглядит хорошо
- Проверка работоспособности клиента
- Но мой класс "валюта" исчезла
Можно ли перехватить атрибуты "validation" / "html" из Expression<Func<TModel, TResult>> expression
?
Извините за этот очень длинный пост, но это немного сложно для меня. Я надеюсь быть достаточно ясным.
Спасибо всем