2011-05-03 346 views
7

我想一起使用一些AJAX和ASP.Net,使我能够运行的功能,而不必刷新整个页面,但我偶然发现这样做的问题ASP.NET DropDownList OnSelectedIndexChanged事件没有被触发

这里是我的代码

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

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:DropDownList ID="ddl1" runat="server" OnSelectedIndexChanged="update1" /> 

     <asp:TextBox runat="server" ID="txt1" /> 

    </ContentTemplate> 
</asp:UpdatePanel> 

而这里的背后

Sub update1(ByVal sender As Object, ByVal e As EventArgs) 

    txt1.Text = Now.ToString 

End Sub 

我的代码不会触发事件,因为我没有AutoPostBack="True"我的DDL,但增加不到ddl将回发整个页面。

有没有办法避免使用AutoPostBack="True",以便它只更新面板?

我知道我可以使用一个asp:Button来解决这个问题,但我真的希望能够如果你想避免整个视图状态发送给使用DDL与OnSelectedIndexChanged

感谢

+0

确定AutoPostBack =“True”回发整个页面? – 2011-05-03 10:27:53

+2

添加autopostback ='true'不应该回发整个页面(至少页面不会flickr) - 它应该只更新更新面板的内容? – Paddy 2011-05-03 10:28:41

回答

7

服务器,你应该看看callbacks

相反,如果你想避免整个页面的刷新,但回发,这应该工作:

<asp:DropDownList ID="ddl1" runat="server" OnSelectedIndexChanged="update1" AutoPostBack="True" /> 

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <Triggers> 
     <asp:AsyncPostbackTrigger ControlID="ddl1" EventName="SelectedIndexChanged" /> 
    </Triggers> 
    <ContentTemplate> 
     <asp:TextBox runat="server" ID="txt1" /> 
    </ContentTemplate> 
</asp:UpdatePanel> 
+0

谢谢,效果很好 – 2011-05-03 10:37:25

+0

AutoPostBack =“True”。谢谢。我讨厌使用UpdatePanels(我更喜欢JQuery),所以我觉得我会回到过去。但这是我今天需要的。给予好评。 – granadaCoder 2013-03-12 15:07:01

+0

为什么这个答案没有被其他地方给出,而且一个类似的问题已经被问到完全超出了我的意思。正是我在找什么。谢谢。 – samuelesque 2014-10-01 15:43:24

0

尝试用相同的代码和不同的页面名称创建一个新的页面。为我工作

+1

请评论或改进 – 2015-11-25 08:21:06

相关问题