2009-01-20 32 views
12

如何最好地将JQuery与ASP.NET客户端验证模型结合起来?将ASP.NET验证与JQuery相结合的优雅方式

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

但我现在需要实现一些更优雅的东西。我想在JQuery中利用的是聪明的搜索表达式,例如'告诉我是否至少有一个复选框被选中'。我是JQuery的新手,但我认为这是约1行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'的网站,但没有时间去研究那些有趣的新东西。

回答

5

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

你可能会选择手动推出自己的验证控件,然后导致相同的行为,但正如你自己所说的那样,这可能是矫枉过正。

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

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; 
    }); 
} 
+0

注:我不认为只是返回true或false去上班 - 你需要接受2个PARAMS的函数(发件人,参数)并设置ARGS。IsValid = ok;最后为了与webforms验证框架一起玩。 – chris 2011-04-06 18:40:19

+0

@chris - 非常真实 - 我知道更好知道。你知道吗,我会更新答案! – Kobi 2011-04-06 18:41:17

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; 
    }