我遇到問題。UpdatePanel中的DropDownList
在我的項目中,我已經在updatepanel中放置了一個下拉列表。我想要做的是從dropdownlist中選擇一個值並在會話中使用它。
但無論我做什麼,它總是會給我空值,因爲沒有選中「Enable AutoPostBack」。當我這樣做時,它會刷新頁面,所以這不是我想要的。
我該如何解決這個問題?
任何想法...
我遇到問題。UpdatePanel中的DropDownList
在我的項目中,我已經在updatepanel中放置了一個下拉列表。我想要做的是從dropdownlist中選擇一個值並在會話中使用它。
但無論我做什麼,它總是會給我空值,因爲沒有選中「Enable AutoPostBack」。當我這樣做時,它會刷新頁面,所以這不是我想要的。
我該如何解決這個問題?
任何想法...
這聽起來像你可能沒有正確使用UpdatePanel功能。如果您將UpdatePanel設置爲在兒童觸發事件時進行更新,則只應刷新UpdatePanel,而不是整個頁面。下面的代碼似乎與你正在尋找的類似。在更改下拉列表時,只有更新面板回發到服務器,並且當您刷新頁面時,您可以從會話中獲取值。
ASPX CODE
<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);
}
爲了獲取存儲到會話的任何內容,您必須將其提交給服務器。
也許關於爲什麼不希望UpdatePanel刷新的更多細節會有所幫助,並且您正嘗試使用Session中的值來完成該操作。
編輯:根據您的意見,在我看來,解決方案將存儲當前.ascx文件在會話中,並設置您的DropDownList啓用autopostback。
因此,在您處理「下一步」和「後退」按鈕時,將正確的.ascx指示符存儲到會話中。
在回發處理dropdownlist事件期間,您可以通過檢查會話以顯示正確的文件,簡單地確保當前的.ascx文件仍在顯示。當結果返回給客戶端時,沒有任何內容會發生變化,因爲UpdatePanel足夠聰明,可以實現相同的內容,並且您將成功處理下拉列表值。
嗯,我已經創建了像精靈structure.and其非常複雜actually.but讓我告訴üthis.i有7 .ascx文件,並在我的Default.aspx文件在我的updatepanel中有ScriptManager和UpdatePanel,通過使用Next和Back按鈕,我動態調用這些.ascx文件,因此它提供了一個類似於嚮導的視圖。如果我autopostback我的dropdownlist,它將返回到名爲page1.ascx的第一個webusercontrol。這是不能接受me.im試圖找到一個解決方案,但還沒有找到 – iersoy 2009-08-10 20:19:21
,並通過使用會議im計劃存儲全局變量用於其他.ascx文件。 – iersoy 2009-08-10 20:22:09
我更新了我的答案,併爲您提供了一個可能的解決方案。 – womp 2009-08-10 20:48:43
這聽起來像你正在做更多的工作比你需要在這裏。你有沒有看過使用ASP.NET嚮導控件? http://msdn.microsoft.com/en-us/magazine/cc163894.aspx或只是谷歌它。因爲會話是一個服務器端的概念,所以如果你仍然想按照你的方式做,你的有提交給服務器(無需autopostback +手動提交按鈕點擊,或啓用autopostback)。 HTTP是一種無狀態協議,因此唯一的狀態概念必須在HTTP域之外完成。這意味着你堅持在服務器上存儲狀態(例如,在會話中),或者更嚴格地說,在客戶端的計算機上(例如在cookie中)存儲狀態。
謝謝,我會看着它。 – iersoy 2009-08-10 20:39:48
非常感謝我在Page_Load事件控制變量解決的問題。
If Label1.Text = 1 Then
Dim tempcontrol2 As Control = LoadControl("Page1.ascx")
PlaceHolder1.Controls.Add(tempcontrol2)
ElseIf Label1.Text = 2 Then
Dim tempcontrol2 As Control = LoadControl("Page2.ascx")
PlaceHolder1.Controls.Add(tempcontrol2)
End If
感謝ü所有答案
oke現在我發現了一種方法如何解決這個問題,我認爲。我說我動態調用7 ascx文件在updatepanel.if我使用If(IsPostBack)Then .... End If 也許我可以讓它工作 – iersoy 2009-08-10 20:44:57
我通常添加如果(IsPostback)檢查我的頁面加載和頁面初始化函數,如果他們有任何內容... – RSolberg 2009-08-10 21:47:18
@RSolberg:你救了我的一天! – 2012-12-11 20:56:21