0

我正在尝试创建一个使用单选按钮的简单表单。我将单选按钮设置为 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";
}
4

1 回答 1

1

听起来您真正需要的是自定义验证。这样您就可以完全自定义验证以满足您的需求。

这是一个简单的例子:

<script language="javascript" type="text/javascript" >
function CustomValidator1_ClientValidate(source,args)
{   
    //put your javascript logic here
}
//-->
</script>
<body>
    <form id="form1" runat="server">
    <div>   
    <asp:RadioButton ID="RadioButton1" runat="server" GroupName="direction" Text="left" />
    <asp:RadioButton ID="RadioButton2" runat="server" GroupName="direction" Text="right" />
    <asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
    <asp:CustomValidator id="CustomValidator1" runat="server" Display="Dynamic" ErrorMessage="please choose" ClientValidationFunction="CustomValidator1_ClientValidate" OnServerValidate="CustomValidator1_ServerValidate"></asp:CustomValidator>
    </div>
    </form>
</body>

服务器端

    protected void CustomValidator1_ServerValidate(object source, ServerValidateEventArgs args)
    {
        args.IsValid = RadioButton1.Checked || RadioButton2.Checked;
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        if (Page.IsValid)
        {
            //validate is successful.
        }
    }
于 2012-09-09T15:55:32.813 回答