我有一个母版页,上面有一个表格。这是一个必须始终可见的搜索表单。单击该表单的按钮时,我希望将表单数据发送到 search.aspx。问题是,我不知道怎么做。我无法将表单操作设置为 search.aspx,因为使用主表单的所有其他页面都将转到 search.aspx。这是我不想要的。
希望有人可以帮助我:)
谢谢。
我有一个母版页,上面有一个表格。这是一个必须始终可见的搜索表单。单击该表单的按钮时,我希望将表单数据发送到 search.aspx。问题是,我不知道怎么做。我无法将表单操作设置为 search.aspx,因为使用主表单的所有其他页面都将转到 search.aspx。这是我不想要的。
希望有人可以帮助我:)
谢谢。
您可以在单独的表单中创建您的搜索表单,并让它使用 GET 而不是 POST。
要么,要么让主表单处理搜索按钮单击并使用 Server.Transfer 转到搜索表单。
我相信你可以在一页中有多个表格。因此,一个表单(您的搜索表单)将其操作设置为 search.aspx,而另一个表单将设置为页面本身。
为了传递控件“txtSearch”的值,当执行 Server.Transfer 时,您可以做很多事情,包括通过查询字符串变量传递它或设置会话变量,然后在 Page_Load 事件中检查其中任何一个Search.aspx,如果已填充,则调用当用户点击 Search.aspx 页面上的提交按钮时触发的事件。
此外,如果 Search.aspx 文件使用相同的母版页,那么您可以使用 this.Master.FindControl("txtSearch") 来获取控件(在浏览器中生成文件后,您可以查看文件的来源,您会注意到母版页中的控件实际上并不是由它们的 ID 调用的,而是附加了一些东西(即现在可能称为“ctl00_txtSearch”)
ASP.NET Web 表单页面只有一个表单(通常包含在母版页中)。您可以将搜索按钮的回发网址设置到您的搜索页面。
<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() - 它已经为您完成了。
我会:
我使用了类似的过程,在母版页上有一个 HTML 登录表单。
我在这里发布了一个问题和后续解决方案- 看看:
一旦我了解它,它似乎是一个非常简单且相当优雅的解决方案。
这样做的好处是您可以完全控制如何将数据发送到搜索表单。而且您不需要启用将表单数据传输到搜索表单和所有讨厌的东西,只需向搜索页面创建一个新的 GET 请求并让它做它应该做的事情:)
希望这可以帮助。
runat="server"
一个 ASPX 页面上只能有一个表单。其他表单必须是 HTML 表单。
因为您的搜索表单位于母版页中,所以您可以将其构建为包含 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 访问输入。