【问题标题】:Dropdown binding and postbacks - ASP.NET下拉绑定和回发 - ASP.NET
【发布时间】:2010-06-09 07:00:29
【问题描述】:

我有一个相当复杂的页面。 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,但这会导致下拉列表不被填充。

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

编辑: 有人可以回复我对乔纳森回答的评论吗?谢谢

【问题讨论】:

  • 检查你是否有 enableviewstate="false" 某处。确保它是真实的。检查 if(!IsPostBack) 后也加载您的控件。

标签: c# asp.net


【解决方案1】:

使用自定义控件,您必须管理状态。在传递状态的地方有一种冒泡效应。如果你不处理它,你就不会得到状态。

此链接将帮助您入门: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

【讨论】:

    【解决方案2】:

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

    查看这篇关于视图状态的文章以获得详细解释:

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

    【讨论】:

    • 我很困惑。 ASP.NET 是否管理从 System.Web.UI.HtmlControls 继承的控件的视图状态?
    • 我假设自定义控件使用视图状态(下拉列表肯定会),在这种情况下是的,当它被添加到页面集合时,ASP.NET 将管理视图状态。
    • 我之前问过一个关于这个的问题stackoverflow.com/questions/606887/…,其中一位用户说.NET 框架只管理 ASP.NET 控件的视图状态。你知道这是否正确吗?
    • 如果用户控件使用 ViewState 属性,那么它将由 ASP.NET 管理。这意味着要使用视图状态,您只需将数据存储在视图状态字典中,并在需要时检索它。不过,ASP.NET 不会自动为您的控件存储值。
    • @JP - 当你说“ViewState 属性”时,你的意思是使用 ViewState 对象来存储值吗?(例如:ViewState["test"] = "test"?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 2011-02-24
    • 2023-03-13
    相关资源
    最近更新 更多