我正在寻找一种方法来使用自定义ASP.NET验证器来验证输入,而不使用UpdatePanels,也没有完整的回发。
验证器可以做几件事 - 不仅是长度/正则表达式,还有其他一些非标准的东西。
我们的用户需要使用Javascript,因此我不必担心关闭javascript的普通用户。
我看到了几个选项,但没有一个是理想选择:
1)将其吸收并使用UpdatePanels。我在“UpdatePanels is evil”组中,所以我不想这样做。
2)不使用验证控件,通过jQuery或任何其他AJAX框架将值传递给PageMethod静态方法来手动验证字段。每次我需要使用验证器时,这都需要客户端和服务器编码。
3)使用jQuery(或任何其他javascript框架)验证进行客户端验证,然后如果他们以某种方式得到它,请使用服务器代码验证控件进行完全回发。这将要求所有验证规则都用javascript和C#编写。我不关心此时完全失败的回发,因为javascript验证会捕获那些不想让我搞砸的真实用户。
是否有替代方法可以使用真正的CustomValidator控件,只有部分回发,仅限C#代码,用于验证没有UpdatePanels且没有大量冗余javascript的输入?
由于
答案 0 :(得分:1)
我使用2和3的混合物。
首先 - 服务器端验证将存在,无论......
所以我会将需要简单验证逻辑javascript的字段(数字,文本,字符串长度,字符串某些格式等)设置为没有ajax回调,然后使用回调到业务规则或其他更复杂的验证需求的服务器发生,因此复杂的规则只编码一次。
如果您必须在非常快速的响应(或者没有延迟...仅限js)或有效数据之间进行选择,我希望有效数据会赢...所以一起使用2和3希望能给出您的响应速度更快,但不会影响有效数据。
对于通用处理程序等的Ajax回调应该比UpdatePanel快一点,因为传输的数据要少得多......
答案 1 :(得分:1)
老实说,我认为2是一个不错的选择。是否使用CustomValidator,您将编写相同的服务器代码来进行验证。您可以在C#中执行所有验证代码,只需编写JS来调用验证方法,该方法可以是PageMethod或单独的ashx。实际上,你可能会编写一个JS函数,它接受参数来很容易地调用AJAX。