1

私のウェブページ内で、プレースホルダー内にユーザーコントロールをロードしています。これらの各ユーザーコントロールは、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は、ユーザーコントロールをロードするものです。これら2つの周りにIsPostBackチェックを配置すると、コントロールが消えます。これが問題になる可能性があります。

4

3 に答える 3

3

ページの新しいインスタンスで作業していると、動的に追加されたコントロールはポストバックで消えます。それらを保持するために、発生するポストバックのためにそれらを再作成する必要があります。

ViewStateを保持したい場合は、Loadイベントの前にViewStateデータのコントロールへのロードが行われるため、PageLoadではなくPageInitでユーザーコントロールを作成する必要があることに注意することも重要です。

于 2011-09-19T05:18:17.023 に答える
0

コントロールを動的に追加する場合は、ポストバックごとにコントロールを再度追加する必要があります。

Nothingと比較する代わりに、if(Not IsPostBack)または(IsPostBack)を使用してみてください。

ここでは、ポストバックにテキストボックスを動的に追加するだけで、すべてのポストバックに残ります。

     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

エンドクラス

動的に追加しようとしているコントロールを1つの関数/メソッド/サブルーチンに入れて、Load内で呼び出すことができます。

アップデート

データをコントロールに残したい場合は、データをビューステートに保存する必要があります。何があってもコントロールを再度作成する必要がありますが、コントロールがユーザーに返される前に、ビューステートからデータを取得します。ここでは例を挙げて説明します。

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

于 2011-09-19T05:18:47.550 に答える
-4

別のルートに行くことが決定されたので、私はこの質問を放棄します

于 2011-09-20T17:22:34.640 に答える