我正试图通过这个tutorial。本教程似乎完成了我一直在寻找的所有内容,但我无法理解它。
也许是因为我不太了解Xval,jquery.validate。
第一 他似乎正在使用一个类型化的视图:RemoteValidation.Models.User。如果我想传递一些其他数据会发生什么,我将如何得到这个?我是否必须创建另一个类存储用户模型以及我想要的其他内容?
第二
我对这篇文章感到很困惑,因为这可能与客户端和服务器端验证相似,但随后他添加了类似
的行“//添加可选的regEx验证器以最小化ajax请求”
所以对我来说这提出了一个问题,我认为他们已经有了这个:
[RegularExpression(EmailRegEx, ErrorMessage = "Invalid e-mail address.")]”
然后他有了这个
“例如,您需要为服务器和密码强度的远程客户端验证实现所有这些:”
public class IsSafePasswordAttribute : RemotePropertyValidator
{
public IsSafePasswordAttribute()
{
//perform some simple password strength check with a regular expression
//on the client side first
ClientSideRegEx = “.{8,20}”;
}
protected override bool PropertyValid(object value)
{
//Insert more elaborate server-side / remote client side password checking
// logic and return result here…
}
那么如果您阅读注释,似乎构造函数是客户端的,而此PropertyValid是服务器端的?
这是对的吗?如果我只是想为客户端和服务器端都做同样的事情会发生什么?
但他有这个
protected override bool PropertyValid(object value)
{
return (string)value != “adrian@lobstersoft.com”;
}
这个代码就像它只是在客户端一样运行。
我没有得到
ClientSideRegEx = “.{8,20}”;
首先,这真的告诉我它只适用于ClientSide,这意味着我必须为服务器端编写相同的代码?我认为这就是为什么不写两次相同的代码?
他们也没有这样的“[]”中的一个,就像他们所要求的那样?我认为这将是一个非常基本的,所以你需要自己制作什么?
我也不明白他是如何弄清楚它是如何被输入的。就像有这样的文档,我可以看看。我知道它是一个正则表达式,但我想知道其他验证和东西。
[演示中的文件]
然后总的来说,我不知道应该改变什么以及我可以独自留下什么。 就像我开始一个新项目并开始进行验证一样,我是否包含这些文件?
DataAnnotationsModelBinder.cs ExtensionMethods.cs RemoteValidators.cs
另外还有xval文件。 我是否需要更改任何这些.cs文件?或者我可以按原样使用它们吗? 就像我刚刚开始继承“RemotePropertyValidator”并开始输入或者我是否需要进行其他更改?
然后在侧面注释他们仍然使Xval我正在网站上看它现在只有0.8(并且只有beta版),并且在几个月内没有更新。我发布了这个问题“如果他们还在开发中”并且还没有回复。
这给了我一种不安的感觉。
P.S我开放使用其他东西然后xval,如果它可以做同样的事情(更容易)。只要它与jquery和asp.net mvc挂钩。
答案 0 :(得分:1)
我只会回答你提出的一些棘手的问题并解决更大的原则。希望这会对你有所帮助。
1)不,您不必使用强类型视图。我从来没有做。就个人而言,我更喜欢MVCContrib强类型的viewdata.get(viewdata.get(“user”);)。
2)是的,xVal(以及其他类似的库)可以帮助您在服务器端和客户端执行相同的操作。但是......你必须首先设置验证规则。
对于[必需]或[StringLength]这样的事情已经为你完成了。但是总有可能需要更复杂的验证。在这种情况下,您需要单独定义例程(不同的语言,不同的元素,不同的数据访问权限(服务器上的数据库))。
IsPasswordSafe属性就是一个很好的例子。构造函数只是设置javascript正则表达式(在这种情况下“。{8,20}”如果值在8到20个字符之间则返回true) - 非常简单的检查。我的假设是在构造函数中设置了该字符串后,负责创建clientside javascript的函数将读取它。在服务器端(PropertyValid()方法),你可以做更多密集的事情 - 检查字典,检查用户以前的密码等 - 这是不能在本地完成的。
我建议你重新阅读以上内容,然后玩一下,希望一切都会变得更加清晰。
就个人而言,我刚刚开始使用xVal,我对它非常满意。我没有进入自定义验证(也许你应该开始使用附带的DataAnnotations东西)。但是xval的一个要点是你不需要了解jquery.validate的任何信息。只要知道服务器端和客户端并不总是必须 - 有时也不能 - 同步,验证方式。
詹姆斯
答案 1 :(得分:0)
根据我的理解,本文介绍了两种不同的客户端验证方法:
远程客户端验证,其中 客户端发送一个AJAX请求 服务器,要求服务器验证。 这与纯服务器不同 因为它没有 需要页面重新加载。文章显示 如何执行远程客户端验证 没有任何额外的代码。
纯客户端 验证,这是什么 ClientSideRegEx用于 - in 这种情况没有服务器请求 根本不需要更多代码。
对于RemoteValidation.Models.User - 您可以传递任何其他类,只要它在其属性上使用注释属性。