使用javascript对aspx页面上的usercontrol进行验证

时间:2012-01-17 10:32:04

标签: c# javascript asp.net

我有一个用户控件,其中包含3个(日期,月份,年份)下拉列表。我已在aspx页面上调用此用户控件。

请选择日期自。

在我的aspx页面上,所有字段都通过javascript验证进行验证。 当我从该用户控件中选择日期(而不是月份和年份),然后单击“提交”按钮时,它会显示错误消息。 但我的问题是,如果我选择年份(不是日期,月份),那么在这种情况下既不会触发错误消息也不会保存数据。 我希望每当至少一个字段(日,月,年)没有被选中时它就会发出消息。我想在clentside上处理这个问题。请给我你的建议。

function InputValidation(vg) {
    var isValid = true;
    try {
        var j = 0;
        var inputCtrlArr = new Array();
        var key = 'block';
        var inputIntputArr = document.getElementsByTagName('input');
        var inputDdlArr = document.getElementsByTagName('select');
        var inputTextareaArr = document.getElementsByTagName('textarea');
        var c = 0;
        for (var i = 0; inputIntputArr.length > i; i++) inputCtrlArr[c++] = inputIntputArr[i];
        for (var i = 0; inputDdlArr.length > i; i++) inputCtrlArr[c++] = inputDdlArr[i];
        for (var i = 0; inputTextareaArr.length > i; i++) inputCtrlArr[c++] = inputTextareaArr[i];
        for (var i = 0; inputCtrlArr.length > i; i++) {
            if (inputCtrlArr[i].getAttribute('required') == 'true' && inputCtrlArr[i].getAttribute('vg') == vg) {
                if (inputCtrlArr[i].value.trim() == '') {
                    //errinputReqCtrlArr[j++] = inputCtrlArr[i];
                    key = 'block';

                    isValid = false;
                }
                else {
                    key = 'none';
                }
                if (inputCtrlArr[i].type == "checkbox") {
                    if (inputCtrlArr[i].checked == false) {
                        //errinputReqCtrlArr[j++] = inputCtrlArr[i];
                        key = 'block';

                        isValid = false;
                    }
                    else {
                        key = 'none';
                    }
                }
                var errorDivId = inputCtrlArr[i].getAttribute('ErrorDivId');
                var objErrorDivId = document.getElementById(errorDivId);
                if (objErrorDivId != null) objErrorDivId.style.display = key;
            }
        }
 }
    catch (ex) { }

}



function InputCntrlValidate(obj) {
    try {
        if (obj.getAttribute('required') == 'true') {
            if (obj.value == '') {
                key = 'block';
            }
            else {
                key = 'none';
            }
            var errorDivId = obj.getAttribute('ErrorDivId');
            var objErrorDivId = document.getElementById(errorDivId);
            if (objErrorDivId != null) objErrorDivId.style.display = key;
        }
    } catch (ex) { }
}




function sanitizeInput(obj) {

    if (obj.getAttribute('msg') == obj.value) {
        alert("same value");
    }

}

3 个答案:

答案 0 :(得分:0)

如果是我,我会在calendar contro上使用AjaxControlToolKit l。除非该字段是强制性的,否则不需要验证。它更容易,看起来好多了。所有客户方。

只需下载ajxcontrolkit dll并将其包含在您的项目中,并按照任何自定义控件/第三方组件使用。

修改

好的,如果你只想要选择至少一个下拉菜单,那么试试JQuery,例如

function isDropDownsValid()
{
var isValid = true;
$('select').map(function()
            {
                if($(this).val() == -1)
                {
                    isValid = false;
                }
            });
return isValid;
}

然后连接到你的提交按钮

  <asp:Button ID="myButton" runat="server" OnClientClick="return isDropDownsValid" Text="Submit />

这是一个带有演示的fiddle。您可能需要更改选择器$('select')以定位所需的确切下拉列表。

答案 1 :(得分:0)

问题在于您的JavaScript。因为如果它适用于一个下拉列表,那么它应该适用于其他两个。此外,您必须检查月份和日期。如果它是feb那么日子应该是28或29,这将取决于年份。因此需要付出很多努力来解决它。

答案 2 :(得分:0)

您只需要三个RequiredFieldValidators,每ControlToValidateDropDownLists一个 <asp:DropDownlist ID="DdlDate" runat="server"> <asp:ListItem Text="please select" Enabled="true"></asp:ListItem> <asp:ListItem Text="1"></asp:ListItem> <asp:ListItem Text="2"></asp:ListItem> <asp:ListItem Text="3"></asp:ListItem> </asp:DropDownlist> <asp:RequiredFieldValidator ID="ReqDate" ControlToValidate="DdlDate" InitialValue="please select" ErrorMessage="Please select Date" Display="Dynamic" runat="server"> </asp:RequiredFieldValidator> <asp:DropDownlist ID="DdlMonth" runat="server"> <asp:ListItem Text="please select" Enabled="true"></asp:ListItem> <asp:ListItem Text="January"></asp:ListItem> <asp:ListItem Text="February"></asp:ListItem> <asp:ListItem Text="March"></asp:ListItem> </asp:DropDownlist> <asp:RequiredFieldValidator ID="ReqMonth" ControlToValidate="DdlMonth" InitialValue="please select" ErrorMessage="Please select Month" Display="Dynamic" runat="server" > </asp:RequiredFieldValidator> <asp:DropDownlist ID="DdlYear" runat="server"> <asp:ListItem Text="please select" Enabled="true"></asp:ListItem> <asp:ListItem Text="2010"></asp:ListItem> <asp:ListItem Text="2011"></asp:ListItem> <asp:ListItem Text="2012"></asp:ListItem> </asp:DropDownlist> <asp:RequiredFieldValidator ID="ReqYear" ControlToValidate="DdlYear" InitialValue="please select" ErrorMessage="Please select Year" Display="Dynamic" runat="server" > </asp:RequiredFieldValidator> <asp:Button ID="BtnSubmit" runat="server" Text="submit" /> 。如果您的默认值为f.e. “请选择”您应将其设置为验证者的InitialValue

以下是一个示例(我只为日期,月份和年份添加了少量ListItem而不是全部):

{{1}}