我在Asp.net UpdatePanel中有TextBox、RequiredFieldValidator和一个Button。最初,RequiredFieldValidator的Enabled属性设置为false,因此在UpdatePanel内单击按钮时,验证不会第一次启动。然而,在UpdatePanel中的Button事件处理程序上,我将TextBox的值设置为DateTime。现在,我也在使用ScriptManager注册一个启动脚本。RegisterStartupScript方法,通过调用ValidatorEnable函数在客户端上启用上述验证器。我在UpdatePanel外部还有一个按钮,如果TextBox为空,则单击该按钮时RequiredFieldValidator应激发该按钮。但是,在单击UpdatePanel内部的按钮后,TextBox的值将被设置为最新日期时间,并且验证器将被启用,但在从文本框中删除文本并单击更新面板外部的按钮之后,验证器不会被激活。
请参阅以下代码。
客户端代码:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtSomeValue" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="rqdtxtSomeValue" runat="server" Enabled="false" ErrorMessage="*"
ControlToValidate="txtSomeValue"></asp:RequiredFieldValidator>
<asp:Button ID="btnGetValue" runat="server" Text="Get Current Date" OnClick="btnGetValue_Click" />
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="btnSave" runat="server" Text="Save" />
服务器端代码:
protected void btnGetValue_Click(object sender, EventArgs e)
{
txtSomeValue.Text = DateTime.Now.ToString();
string script = @"javascript:ValidatorEnable(document.getElementById('" + rqdtxtSomeValue.ClientID + "', true))";
ScriptManager.RegisterStartupScript(btnGetValue, btnSave.GetType(), "btnGetValue_Click", script, true);
}
有人能告诉我如何在部分页面更新后重新启用字段验证器吗?
您确定在btnGetValue返回并更新UpdatePanel后启用了验证器吗?您是如何测试它是否启用验证器的?您是否尝试在代码隐藏中将验证器设置为启用?
protected void btnGetValue_Click(object sender, EventArgs e) {
txtSomeValue.Text = DateTime.Now.ToString();
rqdtxtSomeValue.Enabled = true;
ScriptManager.RegisterStartupScript(btnGetValue, btnSave.GetType(), "btnGetValue_Click", script, true);
}