带有TextBox.OnTextChanged的UpdatePanel异步事件未触发

时间:2014-11-07 00:17:09

标签: asp.net updatepanel

我有一个用于输入所需用户名的文本框。当用户键入其名称并且输入失去焦点时,我想发送异步回发以检查他们的用户名是否已被占用。这在没有引发错误的情况下工作正常,但我也想处理错误。

Per MSDN,我已经向ScriptManager添加了一个AsyncPostBackError处理程序。我在每次加载页面时都尝试过这种方法,并且只在非回发页面加载时尝试过。

我在UpdatePanel中有我的TextBox,如下所示:

<asp:UpdatePanel ID="upLogin" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional">
    <ContentTemplate>
        <asp:TextBox ID="tbLogin" runat="server" placeholder="username" 
            OnTextChanged="tbLogin_TextChanged" required />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="tbLogin" EventName="TextChanged" />
    </Triggers>
</asp:UpdatePanel>

在代码隐藏中,我有:

protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager.GetCurrent(Page).AsyncPostBackError +=
        BootstrapLogin_AsyncPostBackError;
}

void BootstrapLogin_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
{
    tbLogin.Attributes.Remove("data-success");
    tbLogin.Attributes["data-error-message"] = myErrorMessage;
}

protected void tbLogin_TextChanged(object sender, EventArgs e)
{
    throw new Exception("what?");
}

我还在我的Default.aspx页面标记中添加了Async="true"

当我在TextBox上有AutoPostBack="true"时,会抛出错误并且永远不会调用AsyncPostBackError处理程序。出于某种原因,在回发期间,Page.IsAsync是错误的。我怀疑这是没有处理的原因(或说明原因)。

当我设置AutoPostBack="false"时,尽管指定了触发器,但根本没有触发回发。

想法?

1 个答案:

答案 0 :(得分:0)

看起来下面的代码无法正常工作

ScriptManager.GetCurrent(Page).AsyncPostBackError +=
        BootstrapLogin_AsyncPostBackError;

而不是我只是在标记中设置OnAsyncPostBackError的{​​{1}}属性,它与ScriptManager中的AutoPostback = "True"一起使用。

TextBox

不确定为什么你的代码不起作用。它会选择正确的ScriptManager。

<强>更新

解决了! 我应该在页面生命周期中刷新我的知识:(

实际上,我们应该将您的代码添加到<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="BootstrapLogin_AsyncPostBackError"></asp:ScriptManager> 而不是Page_Init。以下工作完美。

Page_Load

更新2

参见此屏幕截图

enter image description here

希望这有帮助!