我有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
答案 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"
现在它会起作用