在Postback占位符控件消失

时间:2011-09-19 05:06:24

标签: vb.net user-controls ispostback

在我的网页中,我在占位符中加载usercontrols。当更改ajaxcontroltoolkit评级时,这些用户控件中的每一个都会触发回发。我遇到的问题是,如果我使用

If (Not IsPostBack is Nothing)

占位符内的控件在帖子上消失。

我的Page_Load目前看起来像

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Session("ProId") = Nothing
    Session("FolId") = Nothing
    Dim ProId As Integer
    If (Not Request.QueryString("ProjectID") Is Nothing) Then
        ProId = Convert.ToInt32(Request.QueryString("ProjectID").ToString())
        Session("ProId") = Request.QueryString("ProjectID").ToString()
    End If
    Dim FolId As Integer
    If (Not Request.QueryString("FolderID") Is Nothing) Then
        FolId = Convert.ToInt32(Request.QueryString("FolderID").ToString())
        Session("FolId") = Request.QueryString("FolderID").ToString()
    End If
    objUser = New BSSiteUser(CInt(Page.User.SiteUser.intID))
    objProject = New BSProject(ProId)
    objFolder = New BSFolder(objUser.SiteUserID, FolId)
    objOrganization = New BSOrganization(objProject.intOrganizationID, objUser.SiteUserID)
    Me.Load_SubcontractorList()
    Me.Load_EvaluationList(1)
    Me.Load_EvaluationList(2)
    Me.lblorganization.Text = objOrganization.CompanyName
    Me.lblprojectname.Text = objProject.strProjectName
    Me.lblprojectnumber.Text = objProject.strProjectNumber
    Me.lbldatecreated.Text = Date.Now.Date.ToString()
End Sub

Load_EvaluationList是加载用户控件的内容,如果我在那两个周围放置IsPostBack检查,控件就会消失,可能是什么问题

3 个答案:

答案 0 :(得分:3)

当您使用全新的网页实例时,动态添加的控件会在回发时消失。为了让你保留它们,你将不得不为发生的任何回发重新创建它们。

同样重要的是要注意,如果您希望保留ViewState,则应在Page Init而不是Page Load上创建用户控件,因为在Load事件之前将ViewState数据加载回控件。

答案 1 :(得分:0)

如果您要动态添加控件,那么每次回发都需要再次添加控件。

尝试使用if(Not IsPostBack)或(IsPostBack)而不是将其与Nothing进行比较。

这里我只是在回发时动态添加一个文本框,它将保留在每个回发中。

     Partial Class _Default
        Inherits System.Web.UI.Page

      Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If (IsPostBack) Then
        Dim t As TextBox = New TextBox()
        form1.Controls.Add(t)

    End If

End Sub

结束班

您可以将要尝试动态添加的控件放在一个函数/方法/子例程中,只需调用Load内部。

更新

如果您希望数据保留在控件中,则必须将数据保存在视图状态中。无论如何,您都必须再次创建控件,然后再将控件发送回用户,从视图状态获取数据。这里用例子来描述。

http://forums.asp.net/t/1186195.aspx/1

答案 2 :(得分:-4)

我正在放弃这个问题,因为决定采取不同的路线