我了解 PropertyProxyValidator 与 ASP.NET UI 集成。但是,它不能进行客户端验证。这与在 UI 中添加标签并在服务器端填充错误有何不同?
另外,如果我使用的是验证应用程序块,如果我不想在服务器端和客户端重复规则,你建议用什么方法进行客户端验证?
我了解 PropertyProxyValidator 与 ASP.NET UI 集成。但是,它不能进行客户端验证。这与在 UI 中添加标签并在服务器端填充错误有何不同?
另外,如果我使用的是验证应用程序块,如果我不想在服务器端和客户端重复规则,你建议用什么方法进行客户端验证?
PropertyProxyValidator
不能帮助您进行客户端验证。我认为与“在 UI 中添加标签并在服务器端填充错误”的主要区别在于,它PropertyProxyValidator
使您能够在经过验证的控件旁边显示验证错误。
使用PropertyProxyValidator
是很多工作。一切都必须连接起来。一个更好的解决方案是创建一个简单的扩展方法并PropertyProxyValidator
在后面的代码中注册。这使一切变得容易得多。这是一个例子:
protected override void OnPreInit(EventArgs e)
{
this.LastNameTextBox.For<Person>().AddValidator(p => p.LastName);
base.OnPreInit(e);
}
您可以在此处找到有关此方法的更多信息。
当然,在这种情况下它仍然是服务器端,但是这个解决方案使以后启用客户端验证变得更加容易,因为它集中了验证器的创建。
正如您所说,使用 PropertyProxyValidator 与在服务器端使用 ASP.NET 验证器(或使用标签)没有太大区别。主要优点是与验证应用程序块的集成。(假设您认为这是一个优势。:))
如果您已经使用 VAB 创建了规则,那么您可以使用 PropertyProxyValidator 将它们集成到 ASP.NET 中。如果您有一个多层应用程序,这将允许您定义一次验证(比如说在实体上使用属性)并在 ASP.NET 服务器端进行验证。如果验证通过,则可以调用业务/服务层,然后可以在其中运行相同的验证。这将验证集中到一个位置(提高了可维护性),并且可以节省对业务/服务层的调用(性能优势)。
对于使用 VAB 的客户端浏览器验证,我认为没有很多好的选择。David Hayden提到使用 AJAX 来实现“类似客户端的验证”。增强了用户体验,但未保存服务器调用,因此这不是一个完整的解决方案。另一篇文章,使用验证应用程序块进行客户端验证,概述了解析 VAB 配置以创建客户端验证器。这种方法也有缺点(相当多的自定义代码——我们在这里节省了多少工作?)。