为什么会话不加载第一时间和在asp.net中使用F5?

id_aut 发布于 2019-03-09 asp.net 最后更新 2019-03-09 14:32 3 浏览

我在Masterpage pageload中创建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

ContentPage
  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

已邀请:

tmodi

赞同来自:

我认为您的内容页面代码可能在您的母版页代码之前执行。您在哪些方法/事件中有这些陈述? 编辑 - 请参见:asp-net-masterpage-load-first-or-page-load-first。内容页面page_load在主页page_load之前触发 另一个编辑:对于解决方案,尝试将母版页代码移动到init处理程序。

nquae

赞同来自:

查看此页面。 http://msdn.microsoft.com/en-us/library/dct97kc3(v=vs.100).aspx 您的内容页面page_load事件在主页面page_load事件之前被调用 这里有更多信息:FAQ: Sequence that events are raised for Pages, UserControls, MasterPages and HttpModules

kalias

赞同来自:

您正在使用Windows身份验证,在Global.asax中的应用程序的Session_Start中执行此操作 - 如果项目中没有,可以通过项目上的“添加新项”添加它。 这样做有两个原因,首先是因为它只需要每个会话完成一次,但第二个因为它将在您的内容页面中可用,并且可以从母版页中删除。 根据您的代码,您将使标签在主页面中工作,但是在会话中收集和设置用户名的工作在应用程序类中执行。 我试着提供一个代码示例,但我正在通过手机回答这个问题。