簡體   English   中英

下拉列表綁定和回發-ASP.NET

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM