【问题标题】:Passing master page form data to another webform将母版页表单数据传递到另一个 Web 表单
【发布时间】:2008-11-25 15:40:29
【问题描述】:

我有一个母版页,上面有一个表单。这是一个必须始终可见的搜索表单。单击该表单的按钮时,我希望将表单数据发送到 search.aspx。问题是,我不知道怎么做。我无法将表单操作设置为 search.aspx,因为我使用主表单的所有其他页面都将转到 search.aspx。这是我不想要的。

希望有人可以帮助我:)

谢谢。

【问题讨论】:

    标签: c# asp.net forms master-pages


    【解决方案1】:

    为了传递控件“txtSearch”的值,当执行 Server.Transfer 时,您可以做很多事情,包括通过查询字符串变量传递它或设置会话变量,然后检查其中的任何一个Search.aspx 的 Page_Load 事件,如果已填充,则调用当用户点击 Search.aspx 页面上的提交按钮时触发的事件。

    另外,如果 Search.aspx 文件使用相同的母版页,那么您可以使用 this.Master.FindControl("txtSearch") 来获取控件(它在生成后查看文件的来源)在浏览器中,您会注意到母版页中的控件实际上并不是由它们的 ID 调用的,而是附加了一些东西(即现在可能称为“ctl00_txtSearch”)

    【讨论】:

      【解决方案2】:

      您可以在单独的表单中创建搜索表单,并让它使用 GET 而不是 POST。

      要么这样,要么让主表单处理单击搜索按钮并使用 Server.Transfer 转到搜索表单。

      【讨论】:

        【解决方案3】:

        我相信您可以在一个页面中拥有多个表单。因此,一个表单(您的搜索表单)将其操作设置为 search.aspx,而另一个将设置为页面本身。

        【讨论】:

          【解决方案4】:

          ASP.NET 网络表单页面只有一个表单(通常包含在母版页中)。您可以将搜索按钮的回发网址设置到您的搜索页面..

          <asp:Button ID="btnSearch" runat="server" Text="Search" PostBackUrl="~/search.aspx" />
          

          ..或者只是从母版页中的处理程序重定向到它,如下所示:

          protected void btnSearch_Click(object sender, EventArgs e)
          {
              Response.Redirect(@"~/search.aspx?q=" + Server.UrlEncode(txtSearch.Text)); 
          }
          

          ..或者按照 David Kemp 的建议使用 Server.Transfer。

          注意:如果您在搜索页面上使用 Request.Query[@"q"] 来获取查询,则无需使用 Server.UrlDecode() - 它已经为您完成.

          【讨论】:

            【解决方案5】:

            我愿意:

            • 在母版页代码隐藏中添加一些代码以检测 POST 的来源。
            • 一旦我有了 POST 的来源(例如搜索框)。然后我会将其查询传递给搜索表单。

            我使用了类似的过程,在母版页上有一个 HTML 登录表单。

            我发布了一个问题和后续解决方案here - 看看:

            Form Elements in ASP.NET Master Pages and Content Pages

            一旦我开始了解它,这似乎是一个非常简单且相当优雅的解决方案。

            这样做的好处是您可以完全控制将数据发送到搜索表单的方式。而且您不需要启用将表单数据传输到搜索表单和所有讨厌的东西,只需向搜索页面创建一个新的 GET 请求并让它做它应该做的事情:)

            希望这会有所帮助。

            注意:

            您在 ASPX 页面上只能有一个带有 runat="server" 的表单。 其他表单必须是 HTML 表单

            【讨论】:

              【解决方案6】:

              由于您的搜索表单位于母版页中,您可以将其构建为包含 2 个表单。将操作设置为“search.aspx”的搜索表单标签放置在网站其余部分使用的标签之外。

              <body>
                  <form action="search.aspx>
                      <!--search box and submit button-->
                  </form>
                  <form runat="server">
                      <!--rest of page inc placeholder-->
                  </form>
              </body>
              

              如果页面的结构不会启用此功能,您可以将提交按钮的 PosbackUrl 设置为指向“search.aspx”。在这种情况下,需要对“search.aspx”进行编码以在 PreviousPage 属性中查找表单数据,或者使用 Request.Form 来访问输入。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2013-01-19
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-01-25
                相关资源
                最近更新 更多