下拉绑定和回发 - ASP.NET

时间:2009-03-12 00:54:48

标签: c# 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,但这会导致下拉列表没有填充。

如果我每次绑定它,那么我将失去用户的选择

修改: 有人可以回应我对乔纳森答案的评论吗?感谢

2 个答案:

答案 0 :(得分:0)

使用自定义控件,您必须管理状态。在国家传承的过程中会出现一种泡沫效应。如果你不处理它,你就不会得到状态。

此链接可帮助您入门:Server Control Custom State Management

寻找

    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

Custom Property State Management Example

答案 1 :(得分:0)

只需覆盖用户控件中的OnInit方法,然后从该方法加载自定义控件即可。 ASP.NET在OnInit之后和PageLoad之前设置viewstate跟踪。因此,加载控件时设置的默认值被视图状态引擎视为更改,并在回发时被重置。

在viewstate上查看有关详细说明的文章:

http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/truly-understanding-viewstate.aspx