评估页面是否是特定页面引用的结果

时间:2013-04-15 01:51:40

标签: asp.net vb.net ms-access postback

我有一个编辑个人资料页面,允许用户更改他们的信息 - 目前它只允许在表'userprofiles'中有记录的用户编辑他们的信息。我希望新注册的用户也能够编辑他们的个人资料。

此时,我正在使用ASP.NET成员资格系统和Access数据库中的相应asp.net_表来存储用户凭据。 'userprofiles'表是一个单独的表,其中包含更多个人信息。两个表之间没有链接

这是我背后的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    If IsCrossPagePostBack Then
        SeparateNewUserFunction()
        Return
    End If
    If Not IsPostBack Then
        DisplayData()
        SaveConfirmation.Visible = False
    End If
End Sub

这是我的DisplayData()函数,只要有人对它的作用感兴趣:

    Protected Sub DisplayData()
    Dim conn As OleDbConnection = New OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    Dim sql = "SELECT * FROM userprofiles WHERE TravellerName=@f1"
    Dim cmd = New OleDbCommand(sql, conn)
    cmd.Parameters.AddWithValue("@f1", User.Identity.Name)
    conn.Open()
    Dim profileDr = cmd.ExecuteReader()
    profileDr.Read()
    Dim newEmailAddress = ""
    Dim newDescription = ""
    If Not IsDBNull(profileDr("EmailAddress")) Then newEmailAddress = profileDr.Item("EmailAddress")
    If Not IsDBNull(profileDr("Description")) Then newDescription = profileDr.Item("Description")
    If Not IsDBNull(profileDr("AvatarURL")) Then ProfilePic.ImageUrl = profileDr.Item("AvatarURL")
    description.Text = newDescription
    email.Text = newEmailAddress
    conn.Close()

End Sub

我没有检查“userprofiles”表中是否存在与当前用户的User.Identity.Name匹配的记录,而是认为评估用户是否刚从注册表中重定向会更容易.aspx页面。 (如果此评估为真,那么如上所示,将调用单独的“新用户”功能。)

这是我的逻辑,但我不知道VB.NET是否有“referrer”或“isReferred”表达式? (在你看来我觉得isCrossPagePostback可能是正确的,但没有运气!)

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您需要检查记录是否存在并以此为基础构建逻辑。这是唯一正确的方法。如:

  1. 如果您引入新页面来处理注册怎么办?这种逻辑破裂了。
  2. 如果有一天你退休并且下一个人决定重命名Register.aspx页面怎么办?这种逻辑破裂了。
  3. 如果用户点击后退按钮并再次单击“注册”按钮,该怎么办?这种逻辑可能会破裂。
  4. 您还应该考虑该表上的外键和唯一约束,以及使用UserId而不是TravellerName。 TravellerName可以更改,UserId不会。

    ...是的,您可以使用HttpRequest.ServerVariables来引用页面,它会为您提供IIS Server Variables的列表。