【问题标题】:User enters code into TextBox, code gets added to URL (using session)用户在 TextBox 中输入代码,代码被添加到 URL(使用会话)
【发布时间】:2011-09-01 13:51:05
【问题描述】:

我正在使用 ASP.net 4.0 VB :)

我正在使用会话变量将用户输入的代码添加到每个页面的 url。我可以让代码显示在我的文本框所在的页面 URL 的末尾,但是我应该向每个页面添加什么以确保会话保持在人们在会话期间访问的每个 URL 的末尾?这是用户输入其用户代码的页面中的代码。

  Protected Sub IBTextBoxButton_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles IBTextBoxButton.Click
  Session("IB") = IBTextBox.Text
  Dim IB As String = Session("IB")
End Sub


 Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 ProductID.Value = Request.QueryString("id")
 If Session("IB") Is Nothing Then
     tab4.Visible = "False"
 Else
     tab4.Visible = "True"

 End If
End Sub

这是我在其他页面之一的页面加载中所拥有的。我还要添加什么来确保将变量添加到该页面的 URL?

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    Dim IB As String
    IB = Session("IB")
End Sub

【问题讨论】:

    标签: asp.net vb.net session


    【解决方案1】:
      string url = Request.Url.ToString();
      string newUrl = url + url.Contains("?") ? "&" : "?" + "ib=" + Server.UrlEncode(IBTextBox.Text);
      Response.Redirect(newUrl);
      return;
    

    【讨论】:

    • Response 和 Return 下面有波浪线。它说“预期声明”-响应和“语句不能出现在方法 bosy/multiline lambda 之外”-返回
    • 我给的代码是C#(我好几年没看VB了)。当然,该代码需要在函数中。假设用户通过按钮提交页面,此代码将进入按钮的 onClick 处理程序。
    • 当我在文本框中输入代码时出现错误,上面写着Dim newUrl As String = If(url & url.Contains("?"), "&", "?" & "ib=" & Server.UrlEncode(IBTextBox.Text)) '输入字符串的格式不正确。'
    • 请记住,stackoverflow 是帮助解决特定设计和编码问题的绝佳论坛。它不打算成为一个逐行的结对编程或调试工作——你需要自己做一些跑腿的工作。话虽如此,您可能希望使用一些额外的代码(来自布局和代码隐藏)来增加您的原始问题,以帮助解决这个问题。基于带有注释的部分代码的小型迷你转储,很难为您提供帮助。
    【解决方案2】:

    我可能使用的方法是创建一个所有页面都可以继承的基页面类。然后,基本页面将继承 System.Web.UI.Page。

    在您的基本页面类中,为 IB 创建一个属性并处理页面加载事件。

    在这种情况下,检查 QueryString 中是否包含 IB 参数。如果是,请将属性设置为参数中的值。

    Private _IB As String
    Public Property IB() As String
        Get
            Return _IB
        End Get
        Set(ByVal value As String)
            _IB = value
        End Set
    End Property
    
    Public Function GetIB(ByVal url As String) As String
        If Not(_IB = String.Empty) Then
            If (url.Contains("?")) Then
                Return "&IB=" & _IB
            Else
                Return url & "?IB=" & _IB
            End If
        Else
            Return url
        End If
    End Function
    
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not (String.IsNullOrEmpty(Request.QueryString("IB"))) Then
            _IB = Request.QueryString("IB")
        End If
    End Sub
    

    最后,在您的标记中,您需要在所有链接的末尾添加如下内容:

    <a href="<% =GetIB("nextpage.aspx") %>">next page</a>
    

    【讨论】:

    • 我忘了提到有一个数据库,其中包含与 IB 销售或为我们销售的产品相关的所有代码。是否需要更改任何代码以绑定到该数据库?
    • 是的,您可以添加一些代码来检查数据库中代码的状态。如果存在,则继续将其附加到 URL,否则将其删除。这可能会出现一些开销问题,具体取决于您的站点的繁忙程度,因此使用 Cache 对象可能有助于存储检索到的有效代码。
    • 我将该代码放在 CodeBehind 中,不确定这是否是您的意思,但我就是这样做的。我在每个链接中都使用了 GetIB,当我在文本框中输入代码时,什么也没有发生。代码只是位于文本框中,页面看起来像是在尝试做某事,但在我看来它什么也没做。
    • 当我现在点击每个链接时会显示 ?IB=,如何让它只在用户输入代码后才显示?
    • 抱歉耽搁了。如果我理解正确,我相信拥有空白 IB 令牌的问题将是因为 _IB 变量为空。要修复它,请将 IF 块包装在 GetIB 中:If Not (_IB = String.Empty) Then 然后此方法中已经存在的块应该在块内。我已经更新了上面的代码以反映这一点。
    【解决方案3】:

    我将此代码放入母版页以确保每个页面都知道会话是否存在。感谢大家的帮助!

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) 
    Handles Me.Load
      If Session("IB") Is Nothing Then
    
        IBText.Visible = True
        IBTextBox.Visible = True
        IBTextBoxButton.Visible = True
      Else
    
        IBText.Visible = False
        IBTextBox.Visible = False
        IBTextBoxButton.Visible = False
        lblIB.Visible = True
    
        lblIB.Text = "Welcome, " + Session("First_Name") + " " + Session("Last_Name")
      End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 2016-11-30
      • 2016-02-26
      • 1970-01-01
      • 1970-01-01
      • 2014-11-18
      • 1970-01-01
      相关资源
      最近更新 更多