0

C#Webアプリケーションのラジオボタンリストの形式である2つの質問があります。これらの質問には、それらに関連付けられたフィールドバリデーターが必要です。また、Webコントロールの最後にValidationSummaryがあります。[送信]ボタンをクリックすると、そのすぐ横にある質問ごとに2つの必須フィールド検証が表示され、[次の質問に回答する]と入力して、選択されなかった各質問を一覧表示することで、検証の概要が正しく機能します。 。私が抱えている問題は、2つの質問のいずれかを選択すると、「必須フィールド」メッセージが質問の横に表示されますが、ValidationSummaryには表示されないことです。エラーメッセージの質問の1つが選択されたときに、ValidationSummaryを更新または更新するにはどうすればよいですか?もっと具体的にする必要がある場合はお知らせください。

<asp:RadioButtonList ID="Question1" RepeatLayout="Flow" runat="server">
     <asp:ListItem Text="Yes" Value="Yes"></asp:ListItem>
     <asp:ListItem Text="No" Value="No"></asp:ListItem>
</asp:RadioButtonList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" 
     Text="Required" ErrorMessage="Question 1" 
     Display="Dynamic" ControlToValidate="Question1"
     EnableClientScript="true">
</asp:RequiredFieldValidator>

<asp:RadioButtonList ID="Question2" RepeatLayout="Flow" runat="server">
     <asp:ListItem Text="Yes" Value="Yes"></asp:ListItem>
     <asp:ListItem Text="No" Value="No"></asp:ListItem>
</asp:RadioButtonList>
<asp:RequiredFieldValidator ID="RequiredFieldValidator2" runat="server" 
     Text="Required"  ErrorMessage="Question 2" 
     Display="Dynamic" ControlToValidate="Question2" 
     EnableClientScript="true">
</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="ValidationSummary1" runat="server" 
     HeaderText="Answer the following questions:" 
     DisplayMode="BulletList" 
     EnableClientScript="true"/>

<asp:Button ID="buttonSubmit" runat="server" Text="Submit" 
     OnClick="btnSubmit_OnClick"/> 

//Code behind for button
protected void btnSubmit_OnClick(object sender, EventArgs e)
{
    Response.BufferOutput = true;
    Response.Redirect("~/Page.aspx");
}
4

1 に答える 1

0

要約はデフォルトでは動的に更新されず、フォームの送信時にのみ更新されると確信しています。

通常、これを回避するには、クライアント側のonblurイベントをフックしてValidationSummaryOnSubmit()を呼び出しますが、選択したラジオボタンが変更されたときにRadioButtonListがこのイベントをトリガーしないようです。

次の候補はクライアント側のonClickイベントですが、RadioButtonListコントロールにはOnClientClickイベントがありません。

したがって、テストしたときにうまくいった解決策は、RadioButtonListの各ListItemに対してクライアント側のonClickイベントをフックすることでした。このような:

<asp:RadioButtonList ID="Question1" RepeatLayout="Flow" runat="server">
    <asp:ListItem Text="Yes" Value="Yes" onClick="ValidationSummaryOnSubmit()"></asp:ListItem>
    <asp:ListItem Text="No" Value="No" onClick="ValidationSummaryOnSubmit()"></asp:ListItem>
</asp:RadioButtonList>

ただし、やりたいことをたくさん持っていると、これは急速に醜くなります。RadioButtonListをサブクラス化し、サーバー側でListItem onclickフックを追加して、クライアントに送信する前に各子リストアイテムに追加し、ストックバージョンの代わりにカスタムバージョンのRadioButtonListを使用することを検討してください。

于 2013-02-25T23:21:28.723 に答える