2014-11-07 81 views
0

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

根据MSDN,我在ScriptManager中添加了一个AsyncPostBackError处理程序。我已经在每次页面加载时都尝试了这一点,并且只在非回发页面加载时尝试过。

我有我的一个UpdatePanel文本框,如下所示:

<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?"); 
} 

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

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

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

想法?

+0

你能发布错误吗? – sh1rts 2014-11-07 00:35:44

+0

错误只是我抛出的异常。所以在这种情况下,错误是“什么?” :) – dfoverdx 2014-11-07 01:04:44

回答

0

它看起来像下面的代码如预期

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

取而代之的是我只设置在标记的ScriptManagerOnAsyncPostBackError属性,并将其与AutoPostback = "True"TextBox工作不起作用。

<asp:ScriptManager ID="ScriptManager1" runat="server" OnAsyncPostBackError="BootstrapLogin_AsyncPostBackError"></asp:ScriptManager> 

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

UPDATE

解决它! 我要刷新我的页面生命周期:(

其实知识,我们应该增加你的代码Page_Init而非Page_Load。完美以下工作。

protected override void OnInit(EventArgs e) 
     { 
      base.OnInit(e); 

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

更新2

见本屏幕捕获

enter image description here

希望这有助于!

+0

我敢打赌,这样做,但我没有访问ScriptManager标记。 :( – dfoverdx 2014-11-07 02:06:51

+0

不要伤心,每个问题都有一个解决方案:P请参阅我的更新顺便说一下,我只是好奇,为什么你不能访问ScriptManager标记? – Sam 2014-11-07 02:40:33

+0

您是否使用AutoPostBack =“true”或“false”?将它移到Page_Init并没有改变我最初发布的行为。 – dfoverdx 2014-11-07 02:48:14