3

我了解 PropertyProxyValidator 与 ASP.NET UI 集成。但是,它不能进行客户端验证。这与在 UI 中添加标签并在服务器端填充错误有何不同?

另外,如果我使用的是验证应用程序块,如果我不想在服务器端和客户端重复规则,你建议用什么方法进行客户端验证?

4

2 回答 2

2

PropertyProxyValidator不能帮助您进行客户端验证。我认为与“在 UI 中添加标签并在服务器端填充错误”的主要区别在于,它PropertyProxyValidator使您能够在经过验证的控件旁边显示验证错误。

使用PropertyProxyValidator是很多工作。一切都必须连接起来。一个更好的解决方案是创建一个简单的扩展方法并PropertyProxyValidator在后面的代码中注册。这使一切变得容易得多。这是一个例子:

protected override void OnPreInit(EventArgs e)
{
    this.LastNameTextBox.For<Person>().AddValidator(p => p.LastName);
    base.OnPreInit(e);
}

您可以在此处找到有关此方法的更多信息。

当然,在这种情况下它仍然是服务器端,但是这个解决方案使以后启用客户端验证变得更加容易,因为它集中了验证器的创建。

Tuzo已经引用了这篇文章。这是我在网上找到的关于使用 VAB 进行客户端验证的唯一参考。

于 2010-03-16T07:57:06.520 回答
1

正如您所说,使用 PropertyProxyValidator 与在服务器端使用 ASP.NET 验证器(或使用标签)没有太大区别。主要优点是与验证应用程序块的集成。(假设您认为这是一个优势。:))

如果您已经使用 VAB 创建了规则,那么您可以使用 PropertyProxyValidator 将它们集成到 ASP.NET 中。如果您有一个多层应用程序,这将允许您定义一次验证(比如说在实体上使用属性)并在 ASP.NET 服务器端进行验证。如果验证通过,则可以调用业务/服务层,然后可以在其中运行相同的验证。这将验证集中到一个位置(提高了可维护性),并且可以节省对业务/服务层的调用(性能优势)。

对于使用 VAB 的客户端浏览器验证,我认为没有很多好的选择。David Hayden提到使用 AJAX 来实现“类似客户端的验证”。增强了用户体验但未保存服务器调用,因此这不是一个完整的解决方案。另一篇文章,使用验证应用程序块进行客户端验证,概述了解析 VAB 配置以创建客户端验证器。这种方法也有缺点(相当多的自定义代码——我们在这里节省了多少工作?)。

于 2010-03-16T06:56:10.503 回答