OnTextChanged部分回发未发生

时间:2011-09-30 15:44:09

标签: c# asp.net user-controls

我有OnTextChanged事件的以下代码:

protected void CustomTextBox_OnTextChanged(object sender, EventArgs e)
{
    if (tick.Attributes["class"] == "tick displayBlock")
    {
        tick.Attributes["class"] = "displayNone";
        tick.Attributes.Add("class", "displayNone");
    }
    checkAvailability.Attributes.Add("class", "displayBlock");
    checkAvailability.Attributes["class"] = "displayBlock";
}

<asp:UpdatePanel ID="upMyUpdatePanel" runat="server">
    <ContentTemplate>
        <uc:CustomTextBox ID="txtUserName"
            OnTextChanged="CustomTextBox_OnTextChanged" 
            AutoPostBack="True"
            class="someClass">
        </uc:CustomTextBox> 
    </ContentTemplate>
</asp:UpdatePanel>

所以我上面的代码在Chrome,IE 8,9中运行得非常好。

然而,Firefox 6似乎没有进行部分回发。

在有人要求之前,我已经在我的customtextbox实例上使用了文件更改和自动回复的事件。您可以在相关问题上查看:Exposing and then using OnTextChange Event handler

3 个答案:

答案 0 :(得分:1)

此问题是由双重AutoPostBack造成的。

家长控制:

<uc:CustomTextBox ID="ctbMyTextBox"
                        OnTextChanged="CustomTextBox_OnTextChanged"              
                        AutoPostBack="True"             
                        class="someClass">         
</uc:CustomTextBox>      

儿童控制:

<asp:UpdatePanel ID="upMyUpdatePanel" runat="server">     
    <ContentTemplate>            
        <uc:CustomTextBoxChild ID="ctbcMyTextBox"
                          OnTextChanged="CustomTextBox_OnTextChanged"              
                          AutoPostBack="True"             
                          class="someClass">         
        </uc:CustomTextBoxChild>      
    </ContentTemplate> 
</asp:UpdatePanel> 

在父控件中,我删除了AutoPostBack="True",这解决了我的问题。

如果有人可以进一步解释为什么Double AutoPostback会导致这种情况,我很乐意检查您的答案是否正确。

答案 1 :(得分:0)

从父级删除autopostback并将其添加到child(您的自定义)。这将解决问题。此外,由于它是自定义控件,因此您从父级继承属性。即使您从custo控件中删除了Autopostback,我认为默认情况下它可能会在其父级中属性为真。

答案 2 :(得分:0)

设置UpdatePanel Mode="Conditional"和  AutoPostBack="True" and enableviewstate="true"

现在它会起作用