C# 未发生OnTextChange部分回发
我有以下用于ContextChanged事件的代码:C# 未发生OnTextChange部分回发,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有以下用于ContextChanged事件的代码: protected void CustomTextBox_OnTextChanged(object sender, EventArgs e) { if (tick.Attributes["class"] == "tick displayBlock") { tick.Attributes["class"] = "displayNone"; tick.Attributes.Add("class",
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";
}
以及:
此问题是由双重自动回发引起的
父控件:
<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”
,这为我解决了这个问题
如果有人能进一步解释为什么双重自动回邮会导致这种情况,我很乐意检查您的答案是否正确。从父项中删除自动回邮并将其添加到子项(您的自定义回邮)。这将解决问题。此外,由于它是一个自定义控件,因此您从父控件继承属性。即使从custo控件中删除Autopostback,我认为它也可以工作,因为默认情况下,该属性在其父控件中为true。setUpdatePanel Mode=“Conditional”
和
AutoPostBack=“True”和enableviewstate=“True”
现在它可以工作了你写:部分回发。但是,我看不到您在问题中提到AJAX。那么,您使用AJAX吗?如果是这样,请发布代码。@MichelvanEngelen我添加了UpdatePanel,允许我执行ajax。啊,明白了,CustomTextBox_OnTextChanged是我创建的自定义服务器控件,父控件有AutoPostBack=“true”,子控件实例也有AutoPostBack=“true”使ContextChanged执行两次将其从父级中删除,现在可以工作了。叹气*如果有人想要悬赏积分,你可以发布答案,我感觉很慷慨!
<asp:UpdatePanel ID="upMyUpdatePanel" runat="server">
<ContentTemplate>
<uc:CustomTextBoxChild ID="ctbcMyTextBox"
OnTextChanged="CustomTextBox_OnTextChanged"
AutoPostBack="True"
class="someClass">
</uc:CustomTextBoxChild>
</ContentTemplate>
</asp:UpdatePanel>