フォームで定義されたラジオボタン リストがあります。ユーザーがいずれかのオプションを選択すると、ポストバックが実行され、ビジネス ロジックが実行されます。問題は、ラジオボタンオプションをチェックするたびにユーザーからの確認を追加したいということです。ユーザーが [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 を返すと、ラジオ ボタンの値が失われることです。つまり、ラジオ ボタンが選択されていません :(