在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上投入了很多资金,并且不希望这样做。
谢谢!
发布于 2010-11-06 08:29:25
我也遇到了同样的情况……我偶然看到了这篇文章,在下面有一个有趣的评论,尽管我不太能让它工作。
http://lunaverse.wordpress.com/2008/11/24/mvcfluenthtml-fluent-html-interface-for-ms-mvc/
如果你能理解它的意思,最好把它放回这里。
保罗
发布于 2010-11-10 02:31:57
我从那篇博客文章working Paul中得到了评论,并修改了它,使用所有已知的MVC验证适配器,而不仅仅是所需的一个(基本上模仿了框架本身的大部分内容)。我为MVC Contrib实现了一个补丁来处理它,但最后我还是放弃了,直到MVC3被最终确定,MVC Contrib在此基础上构建。当更新版本即将发布时,没有必要经历这一切。
这是我最终得到的结果(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";
}
}希望这能对你有所帮助。
https://stackoverflow.com/questions/4106926
复制相似问题