我有个问题.
在我的项目中,我在更新面板中放置了一个下拉列表.我想要做的是从下拉列表中选择一个值并在会话中使用它.
但无论我做什么,它总是会给我空值,因为没有选中“启用AutoPostBack”.当我这样做时,它会刷新页面,所以这不是我想要的.
我怎么解决这个问题?
有任何想法吗…
解决方法
听起来您可能没有正确使用UpdatePanel功能.如果在子项目触发事件时将UpdatePanel设置为更新,则只刷新UpdatePanel,而不是整个页面.下面的代码似乎与您所寻求的类似.更改下拉列表时,只有更新面板会回发到服务器,当您刷新页面时,可以从会话中获取值.
ASPX代码
<form id="form1" runat="server"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <div> Current Time: <asp:Label ID="lblTime" runat="server" /><br /> Session Value: <asp:Label ID="lblSessionValue" runat="server" /><br /> <br /> <asp:UpdatePanel ID="upSetSession" runat="server"> <ContentTemplate> <asp:DropDownList ID="ddlMyList" runat="server" onselectedindexchanged="ddlMyList_SelectedIndexChanged" AutoPostBack="true"> <asp:ListItem>Select One</asp:ListItem> <asp:ListItem>Maybe</asp:ListItem> <asp:ListItem>Yes</asp:ListItem> </asp:DropDownList> </ContentTemplate> <Triggers> <asp:AsyncPostBackTrigger ControlID="ddlMyList" EventName="SelectedIndexChanged" /> </Triggers> </asp:UpdatePanel> </div> </form>
代码背后
protected void Page_Load(object sender,EventArgs e) { this.lblTime.Text = DateTime.Now.ToShortTimeString(); if (Session["MyValue"] != null) this.lblSessionValue.Text = Session["MyValue"].ToString(); } protected void ddlMyList_SelectedIndexChanged(object sender,EventArgs e) { Session.Remove("MyValue"); Session.Add("MyValue",this.ddlMyList.SelectedValue); }