我怎么可以做的 <form method="“get”"> 在ASP.Net 对于一个搜索形式?
题
我有一个搜索形式在应用目前,我正在发展,我希望它是相当于 method="GET"
.
因此,当击的搜索,用户去 search.aspx?q=the+query+he+entered
我想这只是书签网址,再加上感觉更清洁的做法。
我也不想的视图状态隐藏的场价值所附的URL。
最好我可以想出这是:
- 捕获的服务器侧击事件的按钮,
Response.Redirect
. - 附上一Javascript
onclick
处理程序的按钮发射window.location.replace
.
都觉得古怪和最佳的子...你能想到一个更好的办法?
解决方案
利用一个普通的老html形式,不是一个服务器上面的形式(目前=服务器),并且你的确应该能够使它的工作。
这可能是一个问题,如果你有开箱visual studio主页上,它环绕整个页面中的一个服务器侧形式,因为你不能巢的形式。
网络的形式没有吸,但是默认的实现往往做。你不需要使用网络形式的一切。有时候简单的老职位/获得和过程的请求码会做的只是罚款。
其他提示
我曾在一个网站,该网站已张贴到一个第3方网站做上的搜索客户的网站。我做了一个简单的反应。重定向,并通过在搜索参数通过查询串像这样:
protected void Button1_Click(object sender, EventArgs e)
{
string SearchQueryStringParameters = @"?SearchParameters=";
string SearchURL = "Search.aspx" + SearchQueryStringParameters;
Response.Redirect(SearchURL);
}
和你的搜索。aspx页面,在页面加载...
protected void Page_Load(object sender, EventArgs e)
{
if (!string.IsNullOrEmpty(Request.QueryString["SearchParameters"]))
{
// prefill your search textbox
this.txtSearch.Text = Request.QueryString["SearchParameters"];
// run your code that does a search and fill your repeater/datagrid/whatever here
}
else
{
// do nothing but show the search page
}
}
希望这会有所帮助。
该功能允许提交一页的使用获得的方法。
要提交一页的使用的方法获得,你需要:
- 加入这个代码 形式。Method="get"; 在Page_Load方法
- 使用这个代码 < asp:按钮运="服务器"ID="btnGenerate"/> 作为一个提交按钮
- 添加 rel="不提交" 属性的所有形式的元素,你不希望包括在查询字符串
- 改变的代码隐藏逻辑的网页使用 请求。查询
- 禁止页视图状态与 EnableViewState="虚假" (除非是用于其他目的)
代码
$(document).ready(function(){ enableSubmitFormByGet(); });
function enableSubmitFormByGet(){
if($("form").attr("method") == "get"){
$("form").submit(function() {
$("[name^=" + "ctl00" + "]").each(function(i){
var myName = $(this).attr("name");
var newName = "p" + (i-1);
$(this).attr("name", newName);
});
var qs =$(this).find("input[rel!='do-not-submit'],textarea[rel!='do-not-submit'],select[rel!='do-not-submit'],hidden[rel!='do-not-submit']").not("#__VIEWSTATE,#__EVENTVALIDATION,#__EVENTTARGET,#__EVENTARGUMENT").serialize();
window.document.location.href = "?" + qs;
return false;
});
我会做(b)由于(a)需要进行两次往返于一个单一的查询。或者,可以禁用视图状态的网页,删除任何其他隐藏的领域通过javascript,并且还使用javascript修改的形式方法从后得到的。我从来没有这样做真实的,但是我的玩具页使用包括样品的工作就像一个特色。它可以说是比更容易编码检索字符串做的,获得通过javascript。
实际上,这听起来像是你会快乐的ASP.NET 视,因为这是很容易可行有通过简单地设定的形式方法,以获得在图。
样本代码使用jquery
$(document).ready( function() {
$('input[type=hidden]').remove();
$('form').attr('method','get');
});
编辑: 似乎你们应该能够做同样的事情server-side,也是。也许在OnPreRenderComplete.没有访问Visual Studio现在以检查。
我一直用的响应。重定向,因为它"作品"。
我不认为这是一个最佳方法。
只是用这个在你的.点击事件之前的形式提交:
$("#__VIEWSTATE").remove();
$("#__EVENTVALIDATION").remove();