【问题标题】:How do you add arguments to an ASP button PostBackUrl?如何向 ASP 按钮 PostBackUrl 添加参数?
【发布时间】:2010-09-17 07:29:06
【问题描述】:

我现在正在构建一个带有文本框和一个按钮的搜索页面,可能还有一个下拉菜单来稍后过滤结果。我将按钮的 PostBackUrl 设置为我的搜索页面 (~/search.aspx)。有没有一种简单的方法可以将文本框中的值传递到搜索页面?

【问题讨论】:

    标签: asp.net search button


    【解决方案1】:

    您可以使用 useSubmitBehavior="true" 并在表单上放置一个 method="get"。这样它将使用浏览器提交行为并将文本框的值附加到查询字符串

    【讨论】:

    • 一个ASP页面不是只能有一个表单吗?我记得在某处读过类似的东西。有一个由visual studio生成的表单,它封装了body标签内的内容。
    • 对,它只能有一个表单,method=get 必须在那个表单上。表单中的所有输入字段都将放在查询字符串中。这可能根本不起作用,只是尝试一下。
    • 没关系,那一定是别的东西。是否有我需要枚举的对象(如 Request.Form 或其他东西)来获取文本框的值?
    • 您可以使用该按钮进行正常回发,然后在代码隐藏中生成您的查询字符串并执行 Response.Redirect(...) 到“~/search.aspx?” + 查询字符串
    【解决方案2】:

    您还可以使用一些 JavaScript 通过在文本框字段中捕获 Enter 键按键事件来完成此操作。您也可以扩展它以执行文本框中的文本验证。 (本例使用jQuery

    $(document).ready(function(){
        // Event Handlers to allow searching after pressing Enter key
        $("#myTextBoxID").bind("keypress", function(e){
            switch (e.keyCode){
            case (13):
                // Execute code here ...
                break;
            default:
                break;
            }
        });
    });
    

    【讨论】:

      【解决方案3】:

      如果您在按钮上设置了 PostBackUrl,则第一页上的搜索框字段以及该页面上的任何其他表单字段都已发布到您的搜索页。诀窍是在您的 search.aspx 页面的代码隐藏中访问它们。

      if (Page.PreviousPage != null)
      {
          TextBox SourceTextBox = 
              (TextBox)Page.PreviousPage.FindControl("TextBox1");
          if (SourceTextBox != null)
          {
              Label1.Text = SourceTextBox.Text;
          }
      }
      

      这是一种方式。还有一些快捷方式,例如使用 search.aspx 页面顶部的 PreviousPageType 指令:

      <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
      

      有关如何使用它以及第一种方法的更多详细信息,可以在这里找到:

      http://msdn.microsoft.com/en-us/library/ms178139.aspx

      【讨论】:

        【解决方案4】:

        解决了这个问题,上一页是“default.aspx”,但是控件不在该页上。由于我使用母版页,我必须选择 Master 而不是 PreviousPage

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          If PreviousPage IsNot Nothing Then
              Dim txtBoxSrc As New TextBox
              txtBoxSrc = CType(Master.FindControl("searchbox"), TextBox)
              If txtBoxSrc IsNot Nothing Then
                  MsgBox(txtBoxSrc.Text)
              End If
          End If
        End Sub
        
        <div class="gsSearch">
            <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
            <asp:Button ID="searchbutton" runat="server" Text="search" 
                 UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
        </div>
        

        【讨论】:

        • 我对 VB.NET 代码不太熟悉,但通过检查 PreviousPage 是否为 null.. 以及 txtBoxSrc 是否为 null,您似乎已经了解了这一点。也许它在您的 CTYpe 中。我认为您当时不必将其装箱为文本框。
        【解决方案5】:

        我不知道为什么您会在该代码中得到一个空引用,仅凭我对 VB 的不了解,但我将尝试进行一些您可能可以尝试的轻微修改。

        我知道 FindControl 返回的类型是 Control.. 也许您可以等待将其装箱为特定类型。

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
          If PreviousPage IsNot Nothing Then
              Dim txtBoxSrc As New Control
              txtBoxSrc = PreviousPage.FindControl("searchbox")
              If txtBoxSrc IsNot Nothing Then
                  MsgBox((CType(txtBoxSrc, TextBox)).Text)
              End If
          End If
        End Sub
        
        <div class="gsSearch">
            <asp:TextBox ID="searchbox" runat="server"></asp:TextBox>
            <asp:Button ID="searchbutton" runat="server" Text="search" 
                 UseSubmitBehavior="true" PostBackUrl="~/search.aspx" />
        </div>
        

        【讨论】:

          【解决方案6】:

          怎么样,这个(vb,对不起):

          通过代码隐藏从文本框中获取值,然后简单地在控件上设置 postbackurl,如下所示:

          dim textval = SourceTextBox.text
          dim myparam = "George"
          
          searchbutton.PostBackUrl = "~/search.aspx?myparam=" & myparam
          

          你可以把它放在处理按钮点击的函数中,不是吗?

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-05-22
            • 1970-01-01
            • 1970-01-01
            • 2021-04-19
            • 2015-03-29
            • 2012-11-09
            • 2011-01-31
            • 1970-01-01
            相关资源
            最近更新 更多