【问题标题】:dropdownlist does not retain values after postback if it is inside formview and is populated at runtime如果下拉列表在 formview 内并且在运行时填充,则在回发后不保留值
【发布时间】:2013-10-16 01:15:56
【问题描述】:

我需要帮助弄清楚为什么某些在表单视图中并在运行时填充的控件在回发后会丢失其内容。

我有一个下拉列表 (ddl_1),我根据同一表单视图中另一个下拉列表 (ddl_2) 中的条目填充它。一切似乎都可以正常工作,因为在回发事件发生之后,新填充的下拉列表 (ddl_1) 为空。

这两个 ddls 的 EnableViewState 都设置为 true。 ddl_2 是数据绑定的,但 ddl_1 不是。在 IsPostBack 子句的 Page_Load 中,ddl_2 是数据绑定的,然后我调用填充 ddl_1 的函数。

如果我将 ddl_1 移到表单视图之外,它会在回发后保留其条目。

另一个类似的问题是表单视图中的文本框。在插入模式下,TextBox 的内容在回发后消失。但在插入模式下不会发生这种情况。

导致这种情况的特定于 formview 的原因是什么?

非常感谢。

这是 Page_load 代码。

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 处理 Me.Load

    If Not IsPostBack Then

        If NavHelper.User.UserName = "" Then
            Dim UserIP As String
            Dim UserLogin As String
            Dim UserEmail As String
            UserIP = HttpContext.Current.Request.UserHostAddress
            UserLogin = HttpContext.Current.Session("Username")
            UserEmail = HttpContext.Current.Session("Email")
            GetUserInfo()

            CurrentRFQ = Nothing
            If NavHelper.RFQ.ID = -1 Then
                formview_RFQ.ChangeMode(FormViewMode.Insert)
                tabpanelCustomerParts.Visible = False
                tabpanelDocuments.Visible = False
                tabpanelReviews.Visible = False
                tabpanelRFQReviewHistory.Visible = False
                listview_CustomerParts.Dispose()

            Else
                formview_RFQ.ChangeMode(FormViewMode.Edit)
                listview_ReviewContracts_Initial.EditIndex = 0
                SessionHelper.CurrentObject = TAA.Library.RFQ.GetObject(NavHelper.RFQ.ID)
                mRFQ = DirectCast(SessionHelper.CurrentObject, TAA.Library.RFQ)
                Dim UserdeptTotal As Long
                UserdeptTotal = HttpContext.Current.Session("DepartmentTotal")
                If formview_RFQ.FindControl("ddlCompanyBuyerNVList") IsNot Nothing Then
                    Dim ddl As DropDownList = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVList"), DropDownList)
                    FillCompanyNameDropDownList(ddl)
                End If
                tabpanelCustomerParts.Visible = True
                tabpanelDocuments.Visible = True
                tabpanelReviews.Visible = True
                tabpanelRFQReviewHistory.Visible = True
                If NavHelper.RFQ.Copy = True Then
                    SetModifyCopy()
                End If
            End If
        Else    'IsPostBack
            datasource_BuyerNVList.Dispose()
            datasource_BuyerNVList.DataBind()               
            Dim ddl As DropDownList
            If (formview_RFQ.CurrentMode = FormViewMode.Insert) Then
                ddl = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVListInsert"), DropDownList)
            ElseIf formview_RFQ.FindControl("ddlCompanyBuyerNVList") IsNot Nothing Then
                ddl = DirectCast(formview_RFQ.FindControl("ddlCompanyBuyerNVList"), DropDownList)
            End If
            FillCompanyNameDropDownList(ddl)
        End If
    End If
End Sub

【问题讨论】:

  • 发布您的Page_Load 代码。

标签: asp.net


【解决方案1】:

在绑定下拉列表时使用 IsPostback 选项。

if (!IsPostback)
{
   BindDropdown1();
   BindDropdown2();
}

这将保留您的状态。如果您不使用 ispostback 每次刷新页面时下拉列表将被绑定。所以第一次使用 ispostback 绑定下拉菜单。

【讨论】:

  • 但只有一个 ddls 被绑定。您是说我需要为绑定的 ddl 调用 DataBind 并基于此填充 IsPostBack 和 !IsPostBack 案例中的其他 ddl?我刚刚发布了我的 Page_Load 代码。你能指出我应该在哪里/我应该在那里添加什么吗?谢谢
猜你喜欢
  • 2014-05-16
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多