[英]Dropdown binding and postbacks - ASP.NET
我的頁面比較復雜。 ASPX頁面加載用戶控件,而用戶控件又加載子用戶控件。
家長控制
protected override void OnInit(EventArgs e)
{
//Loads child control
}
在子用戶控件中,我使用從System.Web.UI.HtmlControls.HtmlSelect
繼承的自定義控件
ASCX:
<cust:CustDropDownList id="ctlDdl" runat="server"/>
ASCX.CS
protected void Page_Load(object sender, EventArgs e)
{
//Binds CtlDdl here
}
當用戶單擊“保存”按鈕時,控件將使用戶控件動態地重新加載,但是會在下拉菜單中添加用戶已選擇的值。 我在這里遇到了雞肉和雞蛋的問題。
我認為只有在ctlDdl不是回發時才需要綁定ctlDdl,但這會導致下拉列表無法填充。
如果我每次都綁定它,那么我將失去用戶的選擇
編輯:有人可以回應我對喬納森回答的評論嗎? 謝謝
使用自定義控件,您必須管理狀態。 傳遞狀態會產生某種泡沫效應。 如果不處理,就不會獲得狀態。
該鏈接將幫助您入門: 服務器控制自定義狀態管理
尋找
Protected Overrides Sub LoadViewState( _
ByVal savedState As Object)
Dim p As Pair = TryCast(savedState, Pair)
If p IsNot Nothing Then
MyBase.LoadViewState(p.First)
CType(Author, IStateManager).LoadViewState(p.Second)
Return
End If
MyBase.LoadViewState(savedState)
End Sub
只需在用戶控件中重寫OnInit方法,然后從該方法中加載自定義控件即可。 ASP.NET在OnInit之后和PageLoad之前設置視圖狀態跟蹤。 因此,加載控件時設置的默認值將被viewstate引擎視為更改,並在回發時重置。
有關詳細說明,請參見有關viewstate的本文:
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.