0

一連のラジオ ボタンといくつかのテキスト フィールドを含むユーザー コントロールがあります。特定のラジオ ボタンがオンになっている場合、2 つのテキスト フィールドの内容を検証したいと考えています。

私のコントロールマークアップにはこれが含まれています:

<asp:TextBox ID="FromDate" runat="server" Columns="8"></asp:TextBox>
<asp:TextBox ID="ToDate" runat="server" Columns="8"></asp:TextBox>
<asp:RadioButton runat="Server" ID="RadioBetween" GroupName="Date" CssClass="date_group_options_control_radio"/>
<asp:CustomValidator ID="DateValidator" runat="server" Display="Dynamic" ClientValidationFunction="ValidateDateFields_Client" OnServerValidate="ValidateDateFields"></asp:CustomValidator>

<script type="text/javascript">
function ValidateDateFields_Client(source, args)
{
    debugger;
    var bRadioBetweenSelected = false;

    var oRadio = document.getElementById('<%=RadioBetween.ClientID%>');
    if (oRadio != null && (oRadio.checked == true || oRadio["checked"] == true))
    {
        bRadioBetweenSelected = true;
    }

    if (bRadioBetweenSelected)
    {
        var oFromDate = document.getElementById('<%=FromDate.ClientID%>');
        var oToDate = document.getElementById('<%=ToDate.ClientID%>');

        if (oFromDate != null && oToDate != null)
        {
            var sFromDate = oFromDate.value;
            var sToDate = oToDate.value;

            source.innerHTML = ValidateFromToDate(sFromDate, sToDate, args);
        }
        else
        {
            args.IsValid = true;
        }
    }
    else
    {
        args.IsValid = true;
    }
}
</script>

ValidateFromToDate は単に値をチェックし、それらが正常であることを確認します。

ただし、RadioBetween がチェックされているかどうかわからないので、チェックには入りません。ただし、サーバー側のコードは問題なく動作します (まったく同じことを行います)。

コントロールで Checked を手動で「true」に設定すると、期待どおりに機能します。

このクライアント側を検証してサーバーへの旅行を保存するにはどうすればよいですか? 私は何を間違っていますか?これはかなり些細なコードのはずです:-)

4

4 に答える 4

0

FireBugまたは他のJavaScriptデバッグツールを使用して問題を特定できます。関数にブレークポイントを設定し、各実行ステップで変数に挿入される値を確認します。

于 2010-11-23T15:46:04.310 に答える
0

Javascript Get or Set Checked Radio Value

于 2010-11-23T16:31:26.617 に答える
0

RadioButtonを使用する理由は明確ではありません。通常、同じGroupNameを持つ複数のRadioButtonがあります。たぶんあなたはチェックボックスが必要ですか?

于 2010-11-23T15:34:28.893 に答える
0

これは、1 つのページに同じコントロールの 2 つのバージョンがあるためです。非表示のもの (モーダル ダイアログの奥深く) がメインのものと競合しています。非表示のコントロール内のコントロールで、クライアント検証関数が 2 回呼び出されています。

これがなぜなのかはまだわかりませんが、コントロールの 2 番目のインスタンスをコメントアウトすると、すべて正常に動作します。

毎日、ASP.NET は私を混乱させます :-)

その理由は次のとおりです。クライアント + サーバー側の CustomValidation を使用したユーザー コントロール。間違ったクライアント側バリデータが選択されています

于 2010-11-23T19:53:08.760 に答える