0

私のページには、カスタム バリデータを使用するテキスト ボックスがあります。

<asp:CustomValidator ID="cv_Question" ControlToValidate="tb_Question" runat="server" ErrorMessage="*" OnServerValidate="ValidateQuestion" ClientValidationFunction="CheckQuestion" ForeColor="#FF0000" ValidationGroup="CreateUser"></asp:CustomValidator>

使用したいクライアント側の検証スクリプトは、ドロップダウン リストのインデックスが既に変更されている場合でも、ドロップダウン リストの SelectedValue に対して常に 0 を返します。

!Page.IsPostBack を使用して、ドロップダウン リストの既定のインデックスを 0 に設定しました。

ドロップダウン リストは次のとおりです。

<asp:DropDownList ID="ddl_Question" runat="server" EnableViewState="true" AutoPostBack="true" onselectedindexchanged="ddl_Question_SelectedIndexChanged">
        <asp:ListItem Selected="False" Text="Select a question" Value="0"></asp:ListItem>
        <asp:ListItem Selected="False" Text="What was the first movie I ever saw?" Value="1"></asp:ListItem>        
        <asp:ListItem Selected="False" Text="What is the middle name of my oldest child?" Value="2"></asp:ListItem>
        <asp:ListItem Selected="False" Text="In what city was my father born?" Value="3"></asp:ListItem>
        <asp:ListItem Selected="False" Text="Who was my favourite cartoon character as a child?" Value="4"></asp:ListItem>
        <asp:ListItem Selected="False" Text="What is my mother's middle name?" Value="5"></asp:ListItem>
        <asp:ListItem Selected="False" Text="In what year did I meet my significant other?" Value="6"></asp:ListItem>
        <asp:ListItem Selected="False" Text="What was my first pet's name?" Value="7"></asp:ListItem>
        <asp:ListItem Selected="False" Text="First name of the maid of honour at my wedding?" Value="8"></asp:ListItem>
        <asp:ListItem Selected="False" Text="First name of my best friend in elementary school?" Value="9"></asp:ListItem>
        <asp:ListItem Selected="False" Text="Name of my all-time favourite movie character?" Value="10"></asp:ListItem>
        <asp:ListItem Selected="False" Text="Create a question" Value="11"></asp:ListItem>
    </asp:DropDownList>

クライアント側の検証は次のとおりです。

   <script type="text/javascript" language="javascript">
        function CheckQuestion(sender, args) 
        {        
            var Question =  args.Value.toString();

            <% if(Convert.ToInt32(ddl_Question.SelectedValue) == 11) 
            { %>
                if (Question != "" && Question != null) 
                {
                    args.IsValid = true;
                    return;
                }
                else
                {
                    args.IsValid = false;
                    return;
                }
            <% } 
            else
            { %>
                alert(<%= Convert.ToInt32(ddl_Question.SelectedValue)%>);
                args.IsValid = true;
                return;
            <% } %>
        }
    </script>

ユーザーが ddl_Question から「質問を作成する」を選択した場合にのみ、tb_Question を検証したいと考えています。

編集:

これが私の SelectedIndexChanged メソッドです。ユーザーが「質問の作成」を選択すると、tb_Question が表示されます。これは、検証が行われる前に発生します。

protected void ddl_Question_SelectedIndexChanged(object sender, EventArgs e)
    {
        if (Convert.ToInt32(ddl_Question.SelectedValue) == 11)
        {
            Question.Visible = true;
        }
        else
        {
            Question.Visible = false;
        }
    }
4

2 に答える 2

1

さて、私の推奨事項は、単純なJavaScriptを使用することです

したがって、その代わりに、JavaScriptとおそらくこのようなjQueryを使用してください

jQuery Nuget:https ://nuget.org/packages/jQuery

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript" language="javascript">
    function CheckQuestion(sender, args) 
    {        
        var Question =  args.Value.toString();
        var questionID = '<%= this.ddl_Question.ClientID %>';
        var currentQuestion = $("#" + questionID).val();

        if (currentQuestion == '11')
        { 
            if (Question != "" && Question != null) 
            {
                args.IsValid = true;
                return;
            }
            else
            {
                args.IsValid = false;
                return;
            }
        } 
        else
        {
            alert(currentQuestion);
            args.IsValid = true;
            return;
        }
    }
</script>
于 2012-07-10T16:50:10.323 に答える
0

このユーティリティ メソッドは、渡された値が null の場合にゼロを返すため、Convert.ToInt32 呼び出しで問題が発生する可能性が高くなります (MSDN でこれを確認できます。http://msdn.microsoft.com/en-us/library/ sf1aw27b.aspx ) 選択されたインデックスがゼロであっても、この時点で SelectedValue プロパティは null である可能性が非常に高いです。SelectedValue をプログラムで設定してみて、違いが生じることを確認してください。

于 2012-07-10T16:39:27.327 に答える