3

私は簡単です:「はい」ラジオボタンがチェックされている場合は、テキストボックスを必須の状況にします。クライアント側とサーバー側の両方の検証を提供しました。私が見つけているのは、次のことです。

  1. クライアントの検証が開始され、アラート メッセージを介して失敗が正しく表示されます。
  2. 検証コントロールはエラー メッセージを表示せず、サーバーにヒットします。
  3. サーバーがヒットして検証が失敗すると、コントロールは適切なエラー メッセージを表示します。

検証に関してクライアントが正しく動作しているのに、エラー メッセージを表示せず、サーバーへの接続を続行できないのはなぜですか?

asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent">
<script src="Scripts/jquery-1.7.2.js" type="text/javascript"></script> 

<script type="text/javascript">
    function testClientValidation(src, args) {
        if ($('#<%=rblstTest.ClientID%>' + ' input:checked').length == 1) {
            if ($('#<%=rblstTest.ClientID%>' + ' input:checked').val().toLowerCase() == "yes") {
                args.isValid = !($('#<%=txtTest.ClientID%>').val() == "");  
            } else {
                args.isValid = true;
            }
        } else {
            args.isValid = true;
        }

        alert(args.isValid);
    }
</script>
</asp:Content>
<asp:Content ID="BodyContent" runat="server" ContentPlaceHolderID="MainContent">
<div>
<asp:RadioButtonList ID="rblstTest" RepeatDirection="Horizontal" RepeatLayout="Flow" runat="server">
    <asp:ListItem>Yes</asp:ListItem>
    <asp:ListItem>No</asp:ListItem>
</asp:RadioButtonList> 

<asp:TextBox ID="txtTest" runat="server"/>

<asp:CustomValidator ID="cust" ControlToValidate="rblstTest" 
                                OnServerValidate="testSeverValidation" 
                                ClientValidationFunction="testClientValidation" 
                                Display="Dynamic" 
                                ErrorMessage="Error!" runat="server"/>

 <asp:LinkButton runat="server" ID="lnkSubmit" Text="Submit"  />
 </div>  
 </asp:Content>
4

2 に答える 2

4

args.IsValidの代わりに使用args.isValid

function testClientValidation(src, args) {
        if ($('#<%=rblstTest.ClientID%>' + ' input:checked').length == 1) {
            if ($('#<%=rblstTest.ClientID%>' + ' input:checked').val().toLowerCase() == "yes") {
                args.IsValid = !($('#<%=txtTest.ClientID%>').val() == "");  
            } else {
                args.IsValid = true;
            }
        } else {
            args.IsValid = true;
        }

        alert(args.IsValid);
    }
于 2012-04-19T09:13:34.120 に答える
0

Hidden Field新しく追加しました。

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript" language="javascript" src="Scripts/jquery-1.4.1.js"></script>
<script language="javascript" type="text/javascript">

    function testClientValidation(src, args) {
        debugger;
        if (document.getElementById('<%= hdn.ClientID %>').value == '1') {
            var txtBox = document.getElementById('<%= txtTest.ClientID%>');
            if (txtBox.value == '') {
                document.getElementById('cust').style.display = 'block';
                document.getElementById('cust').innerHTML = 'Error!'
                document.getElementById('<%= hdn.ClientID %>').value = "1";
                args.IsValid = false;
                return false;
            }
            else {
                document.getElementById('cust').style.display = 'none';
                document.getElementById('cust').innerHTML = '';
                document.getElementById('<%= hdn.ClientID %>').value = "0";
                args.IsValid = true;
            }
        }
        else {
            document.getElementById('cust').style.display = 'none';
            document.getElementById('cust').innerHTML = '';
            document.getElementById('<%= hdn.ClientID %>').value = "0";
            args.IsValid = true;
        }
        return true;
    }


    $(document).ready(function () {
        $("span input[type='radio']").click(function () {
            debugger;
            if ($(this).val() == 'Yes') {
                document.getElementById('<%= hdn.ClientID %>').value = "1";
                if (document.getElementById('<%= txtTest.ClientID%>').value == '') {
                    Page_IsValid = false;
                    document.getElementById('<%= hdn.ClientID %>').value = "1";
                }
                else {
                    Page_IsValid = true;
                }
            }
            else {
                document.getElementById('<%= hdn.ClientID %>').value = "0";
                Page_IsValid = true;
            }
            return true;
        });
    });
</script>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <div>
        <asp:RadioButtonList ID="rblstTest" RepeatDirection="Horizontal" RepeatLayout="Flow"
            runat="server">
            <asp:ListItem>Yes</asp:ListItem>
            <asp:ListItem>No</asp:ListItem>
        </asp:RadioButtonList>
        <asp:TextBox ID="txtTest" runat="server" />
        <asp:CustomValidator ClientIDMode="Static" ID="cust" OnServerValidate="testSeverValidation"
            ClientValidationFunction="testClientValidation" Display="Dynamic" ErrorMessage="Error!"
            runat="server" />
        <asp:LinkButton runat="server" ID="lnkSubmit" Text="Submit" />
        <asp:HiddenField ID="hdn" runat="server" Value="0" />
    </div>
</asp:Content>

詳細については、こちらのリファレンスから確認してください ここに画像の説明を入力してくださいここに画像の説明を入力してください

于 2012-04-18T17:13:12.993 に答える