我从一段时间开始尝试这个,但我无法绕过它。以下是aspx页面显示的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
Test<br />
<asp:DropDownList ID="DropDownList1" runat="server">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
</asp:DropDownList>
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
</html>
以下是button1点击事件的代码:
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
End Sub
Protected Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList1.SelectedIndexChanged
Label1.Text = DropDownList1.SelectedIndex
UpdatePanel1.Update()
End Sub
End Class
你可以告诉我我错过了什么。
答案 0 :(得分:2)
在下拉列表中将autopostback设置为true。
真实的意思是:每次下拉列表中的值发生变化时,都会发生回发到服务器。
但请听Tim Schmelter的回答。如果下拉列表不会更改,最好将其放在更新面板之外,并且必须通过下拉菜单异步触发更新面板(如果您没有为更新面板设置触发器,则每次回发都会更新您的UpdatePanel中)。如果下拉列表的内容发生变化,请将其放在更新面板中。
但就像我说的那样,我很长一段时间都没有使用它,这是一个好主意,可以仔细检查我对这个主题所说的一切。 = P
PS:Microsoft Update面板易于开发,但会使您的网站速度变慢。尝试了解aspnet webservices和jQuery。
答案 1 :(得分:1)
您需要将Scriptmanager放在任何将使用它的控件之前。
所以把它放在你的下拉列表控件之上。 您还需要在下拉列表中将AutoPostBack属性设置为true,以便在其上触发selectedindexchange事件。
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
Test<br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostback="true">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
</asp:DropDownList>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</body>
答案 2 :(得分:1)
您忘记在DropDownList上将AutoPostback
设置为True
。默认值为False
。
http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listcontrol.autopostback.aspx
如果你想在UpdatePanel中触发Async-Postback,如果用户更改了DropDownList,你必须为UpdatePanel指定AsyncPostbackTrigger,因为DropDown不在其中。
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1" EventName="SelectedIndexChanged" />
</Triggers>
除此之外,您需要将ScriptManager放在Ed said的开头。 在这里查看有关ASP.NET-Ajax的更多信息:
答案 3 :(得分:1)
下面是正确的标记,只需将其放到您的页面:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
Test<br />
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostback ="True">
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
</asp:DropDownList>
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="DropDownList1"
EventName="SelectedIndexChanged" />
</Triggers>
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
</form>