1

マスターページのページロードでasp.netセッションオブジェクトを作成していますが、セッションが存在するかどうかをコンテンツページで確認しています。最初の最初のロードでは機能しません。更新 (F5) すると、これを取得できます。

主人

Dim User As System.Security.Principal.IPrincipal
User = System.Web.HttpContext.Current.User

Dim username As String
username = User.Identity.Name

Try
    lblUsername.Text = "Welcome " & IIf(Not String.IsNullOrEmpty(GetFullName(User.Identity.Name)), GetFullName(User.Identity.Name), User.Identity.Name)

    Session("username") = username
Catch ex As Exception

End Try

コンテンツページ

  If Not Page.IsPostBack Then
            If Not Session("username") Is Nothing Then
                Dim Clients As List(Of Dim_Client)
                Dim c As New Dim_Client
                Clients = c.GetClients(Session("username").ToString)
                If Clients.Count > 0 Then
                    ddlClients.DataTextField = "Client_Name"
                    ddlClients.DataValueField = "Client_Idx"
                    ddlClients.DataSource = Clients
                    ddlClients.DataBind()


                End If

            End If

        End If
4

3 に答える 3

1

マスターページ コードの前に、コンテンツ ページ コードが実行されている可能性があります。これらのステートメントはどのメソッド/イベントにありますか?

編集 - ここを参照してください: asp-net-masterpage-load-first-or-page-load-first。コンテンツ ページ page_load がマスター ページ page_load の前に発生する

別の編集: 解決策として、マスター ページ コードを init ハンドラーに移動してみてください。

于 2013-04-11T15:54:35.193 に答える
0

このページをチェックしてください。http://msdn.microsoft.com/en-us/library/dct97kc3(v=vs.100).aspx

コンテンツ ページの page_load イベントは、マスター ページの page_load イベントの前に呼び出されています

詳細はこちら: FAQ: Pages、UserControls、MasterPages、および HttpModules に対してイベントが発生する順序

于 2013-04-11T16:00:27.253 に答える
0

Windows 認証を使用している場合は、Global.asax のアプリケーションの Session_Start でこの作業を行います。プロジェクトにない場合は、プロジェクトの [新しい項目の追加] で追加できます。

これを行う理由は 2 つあります。1 つはセッションごとに 1 回だけ実行する必要があるため、もう 1 つはコンテンツ ページで使用可能になり、マスター ページから削除できるためです。

コードに基づいて、ラベルの作業はマスター ページに残しますが、セッションでユーザー名を収集して設定する作業は、アプリケーション クラスで行います。

コード例を提供しようと思いますが、電話からこれに答えています。

于 2013-04-11T16:04:04.687 に答える