将母版页表单数据传递给另一个webform

时间:2008-11-25 15:40:30

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

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

希望有人可以帮助我:)

日Thnx。

6 个答案:

答案 0 :(得分:1)

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

或者让主表单处理搜索按钮单击并使用Server.Transfer转到搜索表单。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

<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() - 它已为您完成

答案 4 :(得分:0)

我会:

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

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

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

Form Elements in ASP.NET Master Pages and Content Pages

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

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

希望这有帮助。

注意:

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

答案 5 :(得分:0)

因为您的搜索表单位于母版页中,所以您可以将其构造为包含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访问输入。