1

我在 Masterpage 页面加载中创建 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 中执行此工作 - 如果您的项目中没有,您可以通过在项目中添加新项目来添加它。

这样做有两个原因,首先是因为每个会话只需要完成一次,其次是因为它会在您的内容页面中可用并且可以从母版页中删除。

根据您的代码,您将在母版页中保留标签工作,但在会话中收集和设置用户名的工作是在应用程序类中完成的。

我会尝试提供一个代码示例,但我正在通过手机回答这个问题。

于 2013-04-11T16:04:04.687 回答