将ASP.NET验证与JQuery相结合的优雅方法

时间:2009-01-20 01:39:00

标签: asp.net jquery

如何才能最好地将JQuery与ASP.NET客户端验证模型相结合?

我一般都避免实现ASP.NET验证模型,因为它对我所做的事情似乎总是有些过分。对于我现在正在处理的网站,我只是收集非关键用户数据,只需要一些基本的验证。我不希望消息出现在DOM或类似的东西中。无论如何,我总是觉得很难让它看起来正确。

但我现在需要实现一些更优雅的东西。我想在JQuery中利用的是聪明的搜索表达式,比如“告诉我是否至少选中了其中一​​个复选框”。我是JQuery的新手,但我认为这是一行JQuery,在传统的ASP.NET模型中要复杂得多。

所以我想充分利用JQuery的能力,但不能完全取消ASP.NET的验证模型。

到目前为止,我最好的方法是(它几乎落后于ASP.NET):

$('#<%=btnJoinMailingList.ClientID %>').bind('click', function(event) {

   if (...) {
       alert("You must enter a name");
       return false;
   }     
   return true;
});

这里有什么更好的方法?是否有任何推荐的JQuery插件?

PS。我不想使用MVC模型。我正在尝试创建一个非常'RAD'的网站,没有时间去研究那些有趣的新东西。

3 个答案:

答案 0 :(得分:12)

ASP.NET有许多验证控件,其中一个是CustomValidator 您可以为其提供一个使用jQuery的自定义JavaScript函数,并通过参数返回truefalse。您可以使用此控件自动显示错误消息,或者只运行jQuery代码并手动处理显示。

.aspx的:

<asp:CustomValidator ID="CustomValidator1" runat="server" Display="None"
                     ClientValidationFunction="checkTextareaLengths">
</asp:CustomValidator>

JavaScript的:

function checkTextareaLengths(source, args){
  args.IsValid = true;
  $('textarea').each(function(){
    if($(this).text().lenght > 400)
      args.IsValid = false;
  });
}

答案 1 :(得分:5)

ASP.NET webforms和jQuery的验证模型非常非常相似,恕我直言,因为它们都是客户端,而实现其中一个并不一定会破坏另一个。唯一真正的区别在于,在幕后,如果您有一个未经验证的字段,ASP.NET验证器将导致Page.Validate()方法返回false。

您可以选择手动滚动自己的验证控件,然后导致相同的行为,但正如您自己所说的,这可能是过度的。

jQuery也有自己的Validator插件,你可能想看一下:http://docs.jquery.com/Plugins/Validation/Validator

答案 2 :(得分:5)

ASP.NET验证程序是具有其他属性的范围。 使用jquery,您可以访问页面上的所有验证器或按任何条件过滤它们 由jquery支持。通过javascript调用ValidatorValidate函数强制验证。 例如:

function validate_step(step_element) {
        // find all validators on step_element and force validation
        var validators = $(step_element).find("span[controltovalidate]");
        var stepIsValid = true;
        validators.each( function() {
           ValidatorValidate(this); stepIsValid &= this.isvalid;
        });
        return stepIsValid;
    }