2011-09-19 27 views
1

在我的网页中,我正在加载占位符内的usercontrols。当ajaxcontroltoolkit评分发生变化时,这些用户控件中的每一个都会触发回发。我遇到的问题是,如果我使用关于Postback占位符控件正在消失

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

回答

-4

我放弃了这个问题的决定是走不同的路线

3

动态检查这两个四周,彻底消失,可能是什么问题添加的控件在回发时消失,因为您正在处理页面的全新实例。为了让您保留它们,您将不得不重新创建它们,以便发生任何回发。

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

+0

我试图把大部分的载荷送入Page_Init,但阿贾克斯的评价控制不断得到复位。我错过了什么。我了解回发问题 – mattgcon

+0

您是否将评级控制的CurrentRating属性保存到视图状态,然后在回发中将其设置回来? –

+0

我使用的等级控制其设定等保护小组pntrating_Changed(BYVAL发件人为对象,BYVALË作为AjaxControlToolkit.RatingEventArgs) e.CallbackResult = e.Value OnBubbleCalculate(E) 结束子 – mattgcon

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 

末级

你可以把你想在一个函数/方法/子程序动态添加和刚刚呼叫负载的内部控制。

更新

如果你希望你的数据留在您必须将数据保存在ViewState的控件。无论如何,只有在控件发回给用户从视图状态获取其数据之前,您将不得不再次创建控件。这里用例子来描述。

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

+0

我试过这个,但仍然是相同的。 – mattgcon

+0

你也可以用pre init方法来做。 – MStp

+0

这是我不想让控件每次都重新加载的东西。我希望他们留在回发屏幕上。每次页面往返时,我都不想重新加载它们。如果我将它设置在pre_init或page_load中,并且if(Not IsPostBack)中的所有内容都会被清除,并且它们永远不会被重新加载 – mattgcon