繁体   English   中英

使用MvcContrib FluentHtml的ASP.NET MVC客户端验证

[英]ASP.NET MVC Client-side validation with MvcContrib FluentHtml

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

似乎只有在页面上放置验证消息( Html.ValidationMessageFor(x => x.FirstName ))时,客户端验证才会向jQuery Validate注册。 MvcContrib的FluentHtml this.ValidationMessage(x => x.FirstName)仅在服务器端与ModelState一起使用,如果没有错误,则不会写出任何HTML,并且不会在客户端使用jQuery Validate注册给定的属性。

所以我的问题是:现在有没有办法使MvContrib的当前主干构建与MVC2的内置客户端验证配合使用,现在可以轻松进行了? 如果是这样,怎么办? 如果不是,是否建议使用其他客户端验证(xVal除外,我们目前正在使用该折旧,但已将其折旧)? 是否应该在MvcContrib中对其进行修补,使其正常工作? 不得已的方法是转向使用ASP.NET MVC的内置输入生成器,但是我们已经在MvcContrib上投入了很多,而宁愿不这样做。

谢谢!

我处于完全相同的情况下...我偶然发现了这篇文章,并在后面发表了有趣的评论,尽管我无法完全发挥作用。

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

如果可以理解的话,最好将其重新发布到此处。

保罗

我从工作Paul的博客文章中获得了评论,并对其进行了修改,以使用所有已知的MVC验证适配器,而不是仅使用Required适配器(基本上模仿了框架本身的许多功能)。 它如何显示错误消息以及如何使用我们已经拥有的东西变得有些毛茸茸,我为MVC Contrib实现了一个补丁来使用它,但最后我还是放弃了,直到MVC3最终化并成为MVC反对的建立。 即将发布更新版本时,无需进行所有操作。

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

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";
    }
}

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM