首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MvcContrib FluentHtml进行ASP.NET MVC客户端验证

使用MvcContrib FluentHtml进行ASP.NET MVC客户端验证
EN

Stack Overflow用户
提问于 2010-11-05 22:42:31
回答 2查看 505关注 0票数 1

在MvcContrib的FluentHtml构建器中使用内置MVC2代码进行客户端验证的推荐方法是什么?我们使用的是jQuery客户端验证代码,而不是默认的Microsoft AJAX内容,如果这很重要的话(尽管我认为这不应该)。

似乎只有当您在页面上放置一个验证消息(Html.ValidationMessageFor(x => x.FirstName)时,客户端验证才会注册到jQuery验证。MvcContrib的FluentHtml this.ValidationMessage(x => x.FirstName)只适用于服务器端的ModelState,如果没有错误,不会写出任何超文本标记语言,也不会在客户端使用jQuery Validate注册给定的属性。

所以我的问题是:有没有办法让当前的MvContrib主干构建能够轻松地与MVC2的内置客户端验证一起工作呢?如果是这样的话,是怎么做的?如果没有,有没有其他推荐的客户端验证(除了我们目前正在使用的xVal之外,它已经被淘汰了)?应该在MvcContrib中打补丁才能正常工作吗?最后一种办法是使用MvcContrib的内置输入构建器,但我们已经在ASP.NET上投入了很多资金,并且不希望这样做。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2010-11-06 08:29:25

我也遇到了同样的情况……我偶然看到了这篇文章,在下面有一个有趣的评论,尽管我不太能让它工作。

http://lunaverse.wordpress.com/2008/11/24/mvcfluenthtml-fluent-html-interface-for-ms-mvc/

如果你能理解它的意思,最好把它放回这里。

保罗

票数 0
EN

Stack Overflow用户

发布于 2010-11-10 02:31:57

我从那篇博客文章working Paul中得到了评论,并修改了它,使用所有已知的MVC验证适配器,而不仅仅是所需的一个(基本上模仿了框架本身的大部分内容)。我为MVC Contrib实现了一个补丁来处理它,但最后我还是放弃了,直到MVC3被最终确定,MVC Contrib在此基础上构建。当更新版本即将发布时,没有必要经历这一切。

这是我最终得到的结果(FluentViewPage<T>是我们添加行为的地方):

代码语言:javascript
复制
public class ClientsideValidationBehavior<T> : IBehavior<IMemberElement> where T : class
{
    private readonly FluentViewPage<T> _viewPage;

    public ClientsideValidationBehavior(FluentViewPage<T> viewPage)
    {
        _viewPage = viewPage;
    }

    public void Execute(IMemberElement element)
    {
        var attribute = element.GetAttribute<ValidationAttribute>();

        if (attribute == null)
        {
            return;
        }

        var formContext = _viewPage.ViewContext.FormContext;
        var fieldMetadata = formContext.GetValidationMetadataForField(UiNameHelper.BuildNameFrom(element.ForMember), true);

        var modelMetadata = ModelMetadata.FromStringExpression(element.ForMember.Member.Name, _viewPage.ViewData);
        var validators = ModelValidatorProviders.Providers.GetValidators(modelMetadata, _viewPage.ViewContext);

        validators.SelectMany(v => v.GetClientValidationRules()).ForEach(fieldMetadata.ValidationRules.Add);

        fieldMetadata.ValidationMessageId = element.ForMember.Member.Name + "_Label";
    }
}

希望这能对你有所帮助。

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

https://stackoverflow.com/questions/4106926

复制
相关文章

相似问题

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