我有一个包含一个表单的母版页。这是一个必须始终可见的搜索表单。单击该表单的按钮时,我希望将表单数据发送到search.aspx。问题是,我不知道怎么做。我无法将表单操作设置为search.aspx,因为使用主表单的所有其他页面都将转到search.aspx。这是我不想要的。
希望有人可以帮助我:)
日Thnx。
答案 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)
我会:
我使用了类似的过程,在母版页上有一个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访问输入。