首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FluentValidation不支持我添加的CSS类

FluentValidation不支持我添加的CSS类
EN

Stack Overflow用户
提问于 2012-03-04 00:31:01
回答 1查看 728关注 0票数 0

我刚刚实现了FluentValidation,除了一个令人尴尬的小细节之外,一切看起来都很棒。

代码语言:javascript
复制
@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 MVC3的默认实现,这将创建一个<span>,它包含验证器认为合适的任何类和input-validation (这是我的参考资料中的类)。FluentValidation似乎忽略了这个设置。您知道如何将CSS类选择器添加到由FluentValidation生成的范围中吗?

在类似的注释中,以它产生的输出为例:

代码语言:javascript
复制
<form method="post" class="create-post" action="/posts/create" novalidate="novalidate">
    <input type="text" value="" name="Text" id="Text" data-val-required="complete this!" data-val-regex-pattern="long-stuff" data-val-regex="wrong regex!" data-val="true" class="post-input input-validation-error">
    <span data-valmsg-replace="true" data-valmsg-for="Text" class="field-validation-error">
        <span for="Text" generated="true" class="">wrong regex!</span>
    </span>
    <input type="submit" value="Publicar!">
</form>

我觉得我又回到了ASP.NET WebForms :( ..,如何删除诸如novalidate="true"generated="true"属性之类的内容?不过,我对data属性没什么意见。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-07 10:16:40

所以我认为造成麻烦的第一件事是你的验证扩展方法。它调用ValidationMessageFor,这是HTML helper上的一个MVC3扩展,但使用的签名将与向其传递验证消息相匹配:

代码语言:javascript
复制
public static MvcHtmlString ValidationMessageFor<TModel, TProperty>
    (this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, string validationMessage)

根据您的代码,实际上我希望错误消息是您资源中的CSS类名称,基于<span>是如何生成的:

代码语言:javascript
复制
if (!String.IsNullOrEmpty(validationMessage)) {
        builder.SetInnerText(validationMessage);
    }
    else if (modelError != null) {
        builder.SetInnerText(GetUserErrorMessageOrDefault(htmlHelper.ViewContext.HttpContext, modelError, modelState));
    }

所以你可能想把你的扩展修改成这样(如果没有被否决的话):

代码语言:javascript
复制
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正在做其余的事情。如果你想获得更多的控制权,你可以编写你自己的标签生成器;我从MVC3 source中获取了大部分,所以你可以遵循他们的模式或者走不同的路。您还可以参考FluentValidation source以获得更多见解。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9547701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档