1

フォームで定義されたラジオボタン リストがあります。ユーザーがいずれかのオプションを選択すると、ポストバックが実行され、ビジネス ロジックが実行されます。問題は、ラジオボタンオプションをチェックするたびにユーザーからの確認を追加したいということです。ユーザーが [OK] を選択すると、先に進みたいだけです。

サンプル フロー:
1. ラジオボタンの FirstItem がチェックされていると仮定します。
2. ユーザーは 2 番目の項目を選択します - 次に、「よろしいですか」などの確認を追加します -
3. ユーザーが [いいえ] を選択した場合は        、     ポストバック
      なしで変更されたチェックを元に戻す必要があります。ロジック コードは次のとおりです。



<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
    <asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:RadioButtonList ID="rdo" runat="server" RepeatDirection="Horizontal" AutoPostBack="true"
                OnSelectedIndexChanged="LabourScheduleType_CheckedChanged">
                <asp:ListItem Text="1" Value="1" onClick="confirmcheck();"></asp:ListItem>
                <asp:ListItem Text="2" Value="2" onClick="confirmcheck();"></asp:ListItem>
            </asp:RadioButtonList>
        </ContentTemplate>
    </asp:UpdatePanel>
</div>
</form>

分離コードはこんな感じ

ポストバックを制御するためのJavaScript関数も作成しました

<script type="text/javascript">

    function confirmcheck() {
        var retVal = confirm("test");
        return retVal;
    }

</script>


onclick のような属性を追加して、メソッドで false を返すなど、あらゆることを試しました。どういうわけかポストバックが常に発生し、変更されたチェックを元に戻す方法もわかりません! 私は過去4時間からこれに夢中になっています。

EDIT1:

私はインターネットで検索していて、問題の半分の解決策を見つけました!

  <asp:UpdatePanel ID="UpdatePanelCheckBoxes" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:RadioButton ID="RadioButton1" OnCheckedChanged="aaa_cc"  GroupName="aa" runat="server" AutoPostBack="true" Text="test1" />
            <asp:RadioButton ID="RadioButton2" OnCheckedChanged="aaa_cc"  GroupName="aa" runat="server" AutoPostBack="true" Text="test2" />
        </ContentTemplate>
    </asp:UpdatePanel>

コード ビハインド ファイル:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            RadioButton1.Attributes.Add("onClick", "this.blur(); return RadioClick(this);");
            RadioButton2.Attributes.Add("onClick", "this.blur(); return RadioClick(this);");
        }
    }

Javascript は次のようになります。

<script type="text/javascript">

    function RadioClick(radioButton)
    {
        if (confirm('Are you sure?'))
        {
            __doPostBack(radioButton.id,'');
        }
        else
        {
            return false;
        }
    }

</script>

唯一の問題は、false を返すと、ラジオ ボタンの値が失われることです。つまり、ラジオ ボタンが選択されていません :(

4

3 に答える 3

0

試してみてくださいOnClientClick='return confirmcheck();'。その値はonclick、ページがレンダリングされるときに属性の値としてレンダリングされます。また、結果を返すと、デフォルトの処理が続行されるかどうかが通知されます。

OnClickサーバー側のイベントハンドラーを指定します。

于 2013-01-10T02:45:39.860 に答える
0

これを試して:

<asp:ListItem Text="1" Value="1" onClick="if(!confirmcheck()) return false;"></asp:ListItem>
<asp:ListItem Text="2" Value="2" onClick="if(!confirmcheck()) return false;"></asp:ListItem>

onClick で true または false を返すと、ポストバックも発生しないため、confirmcheck() が false の場合にのみ戻ります。

テストしましたが、動作します

于 2013-01-10T02:57:15.517 に答える
0

ラジオ ボタンの HTML 宣言に「EnableViewState=true」を含めます。EDIT1 ソリューションは、この属性を含めた後に機能するはずなので、false を返しても状態は失われません。

于 2013-01-10T09:19:14.403 に答える