Asp.net字段验证器在部分页面更新后未启动



我在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); 
}

最新更新