我该怎么办<;form method=";获得&燃气轮机;在ASP.Net中查找搜索表单?
我目前正在开发的一个应用程序中有一个搜索表单,我希望它相当于我该怎么办<;form method=";获得&燃气轮机;在ASP.Net中查找搜索表单?,asp.net,forms,methods,get,Asp.net,Forms,Methods,Get,我目前正在开发的一个应用程序中有一个搜索表单,我希望它相当于method=“GET” 因此,当点击搜索按钮时,用户进入search.aspx?q=the+query+he+entered 我之所以要这样做,是因为它可以作为书签,而且这样做感觉更干净 我也不希望将viewstate隐藏字段值附加到URL 我能想到的最好办法是: 捕获按钮的服务器端单击事件并响应。重定向 将Javascriptonclick处理程序附加到触发窗口的按钮。位置。替换 两者都感觉古怪和次优。。。 你能想出一个更好的方法吗
method=“GET”
因此,当点击搜索按钮时,用户进入search.aspx?q=the+query+he+entered
我之所以要这样做,是因为它可以作为书签,而且这样做感觉更干净
我也不希望将viewstate隐藏字段值附加到URL
我能想到的最好办法是:
响应。重定向
onclick
处理程序附加到触发窗口的按钮。位置。替换
你能想出一个更好的方法吗?使用一个简单的旧html表单,而不是服务器端表单(runat=server),你应该能够让它工作 但是,如果您有一个现成的VisualStudio母版页,它将整个页面包装在服务器端表单中,这可能是一个问题,因为您不能嵌套表单 Web表单不必很糟糕,但默认实现通常会这样做。你不必事事都使用web表单。有时,普通的post/get和process request代码就可以了。我会选择(b),因为(a)一个查询需要两次往返。或者,您可以禁用页面上的viewstate,通过javascript删除任何其他隐藏字段,还可以使用javascript从post修改表单方法以获取。我从来没有真正这样做过,但是我的玩具页面使用了附带的示例,效果非常好。可以说,这比编码搜索字符串和通过javascript执行get更容易 实际上,听上去使用ASP.NETMVC会更开心,因为在那里,只需将表单方法设置为进入视图,就可以轻松实现 使用jquery的示例代码
$(document).ready( function() {
$('input[type=hidden]').remove();
$('form').attr('method','get');
});
编辑:似乎您也应该能够在服务器端执行同样的操作。也许在OnPreRenderComplete中。现在无法访问Visual Studio进行检查。我一直使用Response.Redirect,因为它“有效”
我认为没有最佳的方法。我在一个网站上工作,该网站必须发布到第三方网站才能在客户的网站上进行搜索。我最后做了一个简单的响应。重定向并通过查询字符串传入搜索参数,如下所示:
protected void Button1_Click(object sender, EventArgs e)
{
string SearchQueryStringParameters = @"?SearchParameters=";
string SearchURL = "Search.aspx" + SearchQueryStringParameters;
Response.Redirect(SearchURL);
}
在您的Search.aspx页面的pageload中
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
}
}
希望这有帮助。此功能允许使用GET方法提交页面 要使用get方法提交页面,您需要:
$(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;
});
只需在表单中使用此选项。在提交表单之前单击事件:
$("#__VIEWSTATE").remove();
$("#__EVENTVALIDATION").remove();
是的,但正如您所说,我的母版页确实用主服务器表单包装了所有内容(因为每一个其他页面都是常规的.net Web表单),不过,谢谢您的回答!我在表单外部添加了另一个占位符,但在主内容分区中添加了另一个占位符。这取决于应用程序的布局,但有时是可能的,如果您的导航依赖于表单内部,则probby不可能。仅供参考-仅当您不创建自己的表单元素时才创建“包装器”表单。我到处都有带有HTML的母版页和母版页中的服务器端表单:)我也会说“使用HTML表单”,所以答案的这一部分是+1:)我希望有人告诉构建我刚刚访问的项目的人,不要用默认表单包装母版页。。可怕。它从form GET方法生成的结果querystring中删除viewstate和eventvalidation字符串。您可以将其粘贴到表单提交事件或提交按钮单击事件中。