jQuery.validate.js和asp.net母版页

时间:2009-08-05 11:23:16

标签: jquery asp.net jquery-validate

我在各种文件中都有jQuery,最近我需要更改母版页中的项目。这导致各种jaavscript包括停止工作。 Stackoverflow是suggesting great ideas来解决有关get by ID选择器的问题。

$("#ctl00_ContentMainPane_eliteUser").html

但是我有一个问题,我们使用jquery.validate.js来验证表单控件,所以在外部 JS文件中有这样的代码

$(document).ready(function(){ 
    $("#aspnetForm").validate({
        rules: 
    {
        ctl00$ContentMainPane$txtFirstName:
        {
            required:true,
            CheckAlfaNumeric:true
        },
        ctl00$ContentMainPane$ctl00$ucRFI$txtComments:
        {
            required:true
        }                       

    },
    messages:
    {
        ctl00$ContentMainPane$txtFirstName: 
        {
            required:" Please enter first name"
        },
        ctl00$ContentMainPane$ctl00$ucRFI$txtComments:
        {
            required:" Please enter comments."
        }
    }
    });
    $("#" + GetPlaceholder() + "txtFirstName").blur(function(){
            $("#" + GetPlaceholder() + "txtFirstName").valid();
    });
    jQuery.validator.addMethod("CheckAlfaNumeric", function(value, element) {
            return this.optional(element) || /^[A-Za-z\ ]+$/i.test(value);
    }, " Please enter alphabet.");
});

如果由于母版页被修改而名称发生变化,是否知道如何防止属性的名称问题?

3 个答案:

答案 0 :(得分:5)

等待.NET 4.0,它允许您准确指定应如何构造ID;)

说真的:AFAIK可以手动创建规则,做类似的事情(JS对象只是属性的“数组”):

var myRules = new Object();
myRules[GetPlaceholder() + "txtFirstName"] = { required:true, CheckAlfaNumeric:true };

var myMessages = new Object();
myMessages[GetPlaceholder() + "txtFirstName"] = { required:"Please enter first name" };

$("#aspnetForm").validate({ rules: myRules, messages: myMessages });

答案 1 :(得分:1)

你看过了吗? http://weblogs.asp.net/psperanza/archive/2009/05/07/jquery-selectors-selecting-elements-by-a-partial-id.aspx用于jQuery中的部分匹配 我能看到的唯一其他选项是将js文件内容添加到页面并使用<%= txtFirstName.ClientID%>

答案 2 :(得分:0)

我的回答是我对veggerby的修改。请提出他的回应,而不是我的回应。他救了那一天。

我在这里做出回应添加一点警告。 (我在做'使用'attr(“名字”))。 并通过下拉列表显示如何执行此操作。

没看到我的内容页面有一个名为“ddlState”和“ddlFavoriteColor”的asp.net下拉列表。我在下拉列表项的顶部放了一个虚拟的“--Select--”值,所以我想要一些selectedIndex大于零的东西。

注意,这个项目被“卡住”了3.5。 :其中我宁愿用酷4.0的功能做点什么。

是的,我的“检查”代码可能更小,但对于网络样本,我喜欢简明扼要,以显示正在发生的事情。

function GetStateDropDownName() {
    var cntlName = $("[id$=_ddlState]").attr("name");
    return cntlName;
}

function GetFavoriteColorDropDownName() {
    var cntlName = $("[id$=_ddlFavoriteColor]").attr("name");
    return cntlName;
}

$(document).ready(function () {

    jQuery.validator.addMethod("dropdownBoxHasItemSelected", function (value, select, arg) {
        var returnValue = false;
        var selectedIndex = $(select).prop("selectedIndex");
        if (selectedIndex != 0) {
            returnValue = true;
        }
        return returnValue;
    }, "Please select a item.");


    var myRules = new Object();
    myRules[GetStateDropDownName()] = { dropdownBoxHasItemSelected: true };
    myRules[GetFavoriteColorDropDownName()] = { dropdownBoxHasItemSelected: true };

    var myMessages = new Object();
    myMessages[GetStateDropDownName()] = { dropdownBoxHasItemSelected: "Please select a State." };
    myMessages[GetFavoriteColorDropDownName()] = { dropdownBoxHasItemSelected: "Please select a Favorite Color." };


    // Initialize validation on the entire ASP.NET form.
    $("#aspnetForm").validate({
        rules: myRules, messages: myMessages
    });