【问题标题】:Can someone help me understand this tutorial better?有人可以帮助我更好地理解本教程吗?
【发布时间】:2009-07-06 04:56:36
【问题描述】:

我正在尝试通过这个tutorial。本教程似乎完成了我一直在寻找的所有内容,但我在尝试理解它时遇到了麻烦。

可能是因为我对Xval、jquery.validate的了解不够。

第一 他似乎正在使用一个类型化的视图:RemoteValidation.Models.User。如果我想传递一些其他数据会发生什么,我将如何得到这个?我是否必须让另一个类存储用户模型和我想要的其他东西?

第二次

我对这篇文章感到很困惑,因为这应该类似于客户端和服务器端验证,但随后他添加了类似

的行

“//添加可选的正则表达式验证器以最小化 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…
}

那么,如果您阅读 cmets,似乎构造函数是针对客户端的,而这个 PropertyValid 是针对服务器端的?

这是正确的吗?如果我只想为客户端和服务器端做同样的事情会发生什么?

但是他有这个

protected override bool PropertyValid(object value)
{
return (string)value != “adrian@lobstersoft.com”;
}

这段代码就像在客户端一样运行。

我不明白

ClientSideRegEx = “.{8,20}”;

首先,这现在真的告诉我它仅适用于客户端,这意味着我必须为服务器端编写相同的代码?我认为这就是不写两次相同的代码的全部目的?

他们是否也没有像所需的范围那样具有这些“[]”之一吗?我认为这将是一个非常基本的,那么您需要自己制作什么?

我也不明白他是如何确定需要输入的。就像那里有我可以查看的文档。我知道这是一个正则表达式,但我想知道其他验证和东西。

[演示中的文件]

然后总的来说,我不知道我应该改变什么以及我可以留下什么。 如果我开始一个新项目并开始进行验证,我是否会包含这些文件?

DataAnnotationsModelBinder.cs 扩展方法.cs RemoteValidators.cs

当然还有 xval 文件。 我是否需要更改任何这些 .cs 文件?或者我可以按原样使用它们吗? 就像我只是开始继承“RemotePropertyValidator”并开始输入还是我必须做一些其他更改?

然后在旁注中,他们是否仍然制作 Xval 我在该网站上查看,它现在只有 0.8(并且仍然只有测试版),并且在几个月内没有更新。我发布了这个问题“如果它们仍在开发中”并且还没有回复。

这让我感到不安。

P.S 如果它可以做同样的事情(更容易),我愿意使用其他东西然后 xval。只要它与 jquery 和 asp.net mvc 挂钩。

【问题讨论】:

    标签: jquery asp.net-mvc validation


    【解决方案1】:

    我只会回答您提出的一些比较棘手的问题,并讨论更大的原则。希望这会对您有所帮助。

    1) 不,您不必使用强类型视图。我从来没有做。就个人而言,我更喜欢 MVCContrib 强类型 viewdata.get (viewdata.get("user");)。

    2) 是的,xVal(和其他类似的库)可以帮助您在服务器端和客户端做同样的事情。但是...您必须首先设置验证规则。

    对于 [Required] 或 [StringLength] 之类的内容,这已经为您完成了。但总有可能您需要更复杂的验证。在这种情况下,您需要分别定义例程(不同的语言、不同的元素、对数据的不同访问(服务器上的数据库))。

    IsPasswordSafe 属性就是一个很好的例子。构造函数只是设置 javascript 正则表达式(在这种情况下,如果值介于 8 到 20 个字符之间,则 ".{8,20}" 返回 true)——一个非常简单的检查。我的假设是,在构造函数中设置该字符串后,负责创建客户端 javascript 的函数将读取它。在服务器端(PropertyValid() 方法),您可以做更密集的事情——检查字典、检查用户以前的密码等——这是本地无法完成的。

    我建议你重新阅读帖子,记住上面的内容,然后玩一玩,希望一切都会变得更清晰。

    就个人而言,我刚刚开始使用 xVal,对此我感到非常满意。我还没有进入自定义验证(也许你应该开始使用包含的 DataAnnotations 东西)。但是 xval 的要点之一是您不需要了解有关 jquery.validate 的任何信息。只需知道服务器端和客户端不必总是——有时也不能——同步、验证。

    詹姆斯

    【讨论】:

    • 谢谢。是的,我又重新阅读了这篇文章,我的问题已经得到了那个人的回答。现在我用调试器逐行浏览了它,我更了解它了。
    • 唯一我仍然不清楚但我什至没有看过的东西是。如果我想做一些其他的正则表达式。我应该使用相同的属性还是可以创建一个新属性。当然,我也可以只使用正则表达式的预定义标签并一起跳过该属性。
    【解决方案2】:

    在我的理解中,文章描述了两种不同的客户端验证方式:

    1. 远程客户端验证,其中 客户端发送 AJAX 请求到 服务器,要求服务器进行验证。 这与纯服务器不同 侧面验证,因为它没有 需要重新加载页面。文章显示 如何执行远程客户端验证 无需任何额外代码。

    2. 纯客户端 验证,这就是 ClientSideRegEx 用于 -- 在 这种情况下没有服务器请求 完全可以,但需要更多代码。

    至于 RemoteValidation.Models.User -- 你可以传递任何其他类,只要它在其属性上使用注释属性。

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-25
      相关资源
      最近更新 更多