我正在尝试创建一个使用单选按钮的简单表单。我将单选按钮设置为 AutoPostBack = True,这样如果单选按钮为真/假,则显示或隐藏子面板。单选按钮是必填字段。我还有一个隐藏的文本框,插入了所选单选按钮的值,这个文本框是我验证的内容(是否为空)。
问题1:
这一直有效,直到您提交并且验证失败。验证消息显示,然后当您单击 AutoPostBack = True 的单选按钮之一时,所有验证都会消失。我可以通过将 Page.Validate() 添加到单击单选按钮时运行的方法来解决此问题。但是,我不希望 Page.Validate() 运行,除非页面已经显示验证错误(所以它不会重新验证,除非表单已经提交并且验证失败)。
就目前而言,在提交表单并且验证失败之前:当您单击任何单选按钮问题时,所有其他需要验证的问题都会显示验证错误。我只是想克服 AutoPostBack,它正在清除单击提交时显示的所有验证消息。
问题2:
如果问题未通过验证,我希望能够更改问题的颜色。我添加了 javascript 来覆盖默认的 .net 设置。我得到了这个工作,但只有当你点击提交按钮而不是在 RadioButton AutoPostBack 之后。
目前,当您单击提交时,所有必填问题都会变为红色,并且还会显示所需的验证消息。但是,如果您单击单选按钮开始修复验证错误,则在 AutoPostBack 上,所有现在为红色的问题都会变回原来的黑色,并且仍会显示所需的验证消息。我怎样才能调用 Javascript 与 Page.Validation() 一起在代码背后的方法中再次运行?
任何帮助将不胜感激!谢谢
下面是到目前为止的代码示例。
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";
}