ラジオボタンを使用した簡単なフォームを作成しようとしています。ラジオ ボタンを AutoPostBack = True に設定します。このように、ラジオ ボタンが true/false の場合、サブパネルは表示または非表示になります。ラジオ ボタンは必須フィールドです。選択したラジオ ボタンの値が挿入される非表示のテキスト ボックスもあり、このテキスト ボックスは (空かどうか) に対して検証されます。
問題 1:
これは、送信して検証が失敗するまで機能します。検証メッセージが表示され、AutoPostBack = True のラジオ ボタンの 1 つをクリックすると、すべての検証が消えます。これは、ラジオ ボタンがクリックされたときに実行されるメソッドに Page.Validate() を追加することで解決できます。ただし、ページに既に検証エラーが表示されていない限り、Page.Validate() を実行したくありません (したがって、フォームが既に送信されて検証に失敗しない限り、再検証は行われません)。
現状では、フォームが送信されて検証に失敗する前に、ラジオボタンの質問をクリックすると、検証が必要な他のすべての質問で検証エラーが表示されます。送信をクリックしたときに表示されるすべての検証メッセージをクリアする AutoPostBack を克服することだけを考えています。
問題 2:
検証に合格しなかった場合、質問の色を変更できるようにしたいと思います。デフォルトの .net 設定を上書きするために JavaScript を追加しました。私はこれを機能させましたが、RadioButton AutoPostBack の後ではなく、送信ボタンをクリックしたときのみです。
現在、[送信] をクリックすると、必要なすべての質問が赤くなり、必要な検証メッセージも表示されます。しかし、ラジオ ボタンをクリックして検証エラーの修正を開始すると、AutoPostBack で、赤だったすべての質問が元の黒に戻り、必要な検証メッセージが引き続き表示されます。コード ビハインド メソッドで Page.Validation() と一緒に Javascript を呼び出して再度実行するにはどうすればよいですか?
どんな助けでも大いに役に立ちます!ありがとう
以下は、これまでのコードの例です。
ASPX コード:
<asp:Table ID="Table1" runat="server" CellSpacing="0" CellPadding="0">
<asp:TableRow>
<asp:TableCell CssClass="question">
<label>4. Have you had an abnormal result from a prenatal test (e.g. amniocentesis, blood test, ultrasound)?</label>
</asp:TableCell>
<asp:TableCell CssClass="answer">
<ul class="selectGroup">
<li>
<asp:RadioButton ID="Q4_true" runat="server" Checked='<%# Bind("Q4_yes") %>' Text="Yes"
GroupName="4" OnCheckedChanged='RB_QuestionSubPane_YN' AutoPostBack="true" /></li>
<li>
<asp:RadioButton ID="Q4_false" runat="server" Checked='<%# Bind("Q4_no") %>' Text="No"
GroupName="4" OnCheckedChanged='RB_QuestionSubPane_YN' AutoPostBack="true" />
</li>
<asp:TextBox ID="Q4_validationBox" runat="server" CssClass="hiddenField" Enabled="false"
Text=''></asp:TextBox>
<asp:RequiredFieldValidator ID="RequiredFieldValidator1" EnableViewState="true" ControlToValidate="Q4_validationBox"
Display="Dynamic" runat="server" ErrorMessage="RequiredFieldValidator"></asp:RequiredFieldValidator>
</ul>
</asp:TableCell>
</asp:TableRow>
</asp:Table>
コードビハインド
protected void RB_QuestionSubPane_YN(object sender, EventArgs e)
{
RadioButton radio_Selected = (RadioButton)sender;
string radio_QuestionID = Convert.ToString(radio_Selected.ID);
(((TextBox)FormView1.FindControl(strQuestionID + "_validationBox")).Text) = radio_Selected.ID.ToString();
Page.Validate();
}
JavaScript
ValidatorUpdateDisplay = function (val) {
var ctl = $('#' + val.controltovalidate);
var eCount = 0;
for (var i = 0; i < Page_Validators.length; i++) {
var v = Page_Validators[i];
if (v.controltovalidate == val.controltovalidate) {
if (!v.isvalid) {
eCount++;
ctl.addClass('validationError');
$('td.question:eq(' + i + ')').addClass('red');
}
};
}
if (eCount > 0) {
ctl.addClass('validationError');
} else {
ctl.removeClass('validationError');
$('td.question:eq(' + i + ')').removeClass('red');
}
if (typeof (val.display) == "string") {
if (val.display == "None") {
return;
}
if (val.display == "Dynamic") {
val.style.display = val.isvalid ? "none" : "inline";
return;
}
}
if ((navigator.userAgent.indexOf("Mac") > -1) &&
(navigator.userAgent.indexOf("MSIE") > -1)) {
val.style.display = "inline";
}
val.style.visibility = val.isvalid ? "hidden" : "visible";
}