FluentValidation не соблюдает добавление моего класса CSS - PullRequest
0 голосов
/ 03 марта 2012

Я только что реализовал FluentValidation, все кажется удивительным, за исключением одной неловкой маленькой детали.

@using (Html.BeginForm("Create", "Posts", FormMethod.Post, new { @class = "create-post" }))
{
    @Html.TextBoxFor(m => m.Text, new { @class = "post-input" })
    @Html.Validation(m => m.Text)
    <input type="submit" value="@Html.Resource("Publish")" />
}

    public static MvcHtmlString Validation<T>(this HtmlHelper<T> helper, Expression<Func<T, string>> expression)
    {
        return helper.ValidationMessageFor(expression, null, Resources.Constants.ModelValidationMessageCssClass);
    }

При реализации по умолчанию из ASP.NET MVC 3 это создало <span>, который имел любой классВалидатор сочтет целесообразным И input-validation (это тот из моего ресурса).FluentValidation, кажется, просто игнорирует эту настройку.Любая идея, как я могу добавить селектор класса CSS к диапазону, сгенерированному FluentValidation?

На аналогичном примечании, возьмите, к примеру, такой вывод, который он производит:я вернулся в ASP.NET WebForms здесь :( .., как я могу удалить такие вещи, как novalidate="true" или атрибут generated="true"? Я в порядке с атрибутами data, хотя.

1 Ответ

0 голосов
/ 07 марта 2012

Итак, первое, что я думаю, вызывает проблемы, это ваш метод расширения проверки. Он вызывает ValidationMessageFor, который является расширением MVC3 для помощника HTML, но с подписью, которая будет соответствовать передаче ему сообщения проверки:

public static MvcHtmlString ValidationMessageFor<TModel, TProperty>
    (this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage)

Исходя из вашего кода, я фактически ожидал бы, что сообщение об ошибке будет именем класса CSS в вашем ресурсе на основе этого фрагмента из того, как генерируется <span>:

if (!String.IsNullOrEmpty(validationMessage)) {
        builder.SetInnerText(validationMessage);
    }
    else if (modelError != null) {
        builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));
    }

Так что вы, вероятно, захотите изменить свое расширение на что-то вроде (если оно не отменяется):

public static MvcHtmlString Validation<T>(this HtmlHelper<T> helper, Expression<Func<T, string>> expression)
{
    return helper.ValidationMessageFor(expression, null, null, new { _class = Resources.Constants.ModelValidationMessageCssClass });
}

Суть в том, что я не думаю, что FluentValidation имеет какое-либо отношение к сгенерированной разметке - она ​​должна только передавать ваши ошибки валидации в ModelState, а ASP.NET MVC делает все остальное. Если вы хотите получить еще больший контроль, вы можете просто написать свой собственный конструктор HTML-тегов ; Я взял большую часть этого из источника MVC3 , чтобы вы могли следовать их шаблонам или пойти другим путем. Вы также можете обратиться к источнику FluentValidation для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...