2008-11-26 26 views
12

我在我目前正在開發的應用程序中有一個搜索表單,我希望它是相當於method="GET"如何在ASP.Net中爲搜索表單執行<form method =「get」>?

因此,點擊搜索按鈕時,用戶去search.aspx?q=the+query+he+entered

的原因我想這僅僅是可收藏的網址,再加上感覺清潔劑做這種方式。

我也不希望viewstate隱藏字段值附加到URL。

我能想出這是最好的:

  1. 捕捉按鈕,Response.Redirect的服務器端單擊事件。
  2. 將一個Javascript onclick處理程序附加到觸發window.location.replace的按鈕。

兩者都感到古怪和次優... 你能想到更好的方法嗎?

回答

10

使用普通的舊HTML表單而不是服務器端表單(runat = server),並且確實應該能夠使其工作。

但是,如果您有一個開箱即用的Visual Studio母版頁,它將整個頁面封裝在服務器端表單中,這是一個問題,因爲您無法嵌套表單。

Web表單不必吮吸,但默認的實現往往這樣做。你不必爲所有事情都使用網絡表單。有時候,簡單的舊的post/get和進程請求代碼會很好。

+0

是的,但你的狀態,我的母版不與周圍的一切都包主服務器形式(因爲每一個其他頁面是一個普通的.net網絡表格) 感謝您的答案,但! – 2008-11-26 01:16:47

+0

我通過在表單外部添加另一個佔位符,但在主內容div內部工作過幾次。取決於你的應用是如何佈局的,但有時候可能,如果你的導航依賴於表單內部的話,那麼probby不可能。 – seanb 2008-11-26 01:36:56

0

我會這樣做(b)因爲(a)將需要兩次往返查詢一次。或者,您可以禁用頁面上的viewstate,通過javascript刪除任何其他隱藏的字段,也可以使用javascript來修改表單方法從post到get。我從來沒有這樣做過,但我的玩具頁面使用包含的樣本就像一個魅力。這可以說比編碼搜索字符串更容易,並通過javascript來獲取。

實際上,聽起來你會對ASP.NET MVC感到高興,因爲通過在視圖中簡單地設置表單方法爲GET,這很容易實現。

示例代碼使用jQuery

$(document).ready(function() { 
    $('input[type=hidden]').remove(); 
    $('form').attr('method','get'); 
}); 

編輯:好像你應該能夠做同樣的事情,服務器端也。也許在OnPreRenderComplete中。目前無法訪問Visual Studio進行檢查。

0

我一直使用Response.Redirect,因爲它「工作」。

我不認爲有一個最佳的方法。

6

我曾經在一個網站上發佈過一個第三方網站,在客戶的網站上進行搜索。最後我做一個簡單的Response.Redirect並在搜索參數,通過查詢字符串,像這樣通過:

protected void Button1_Click(object sender, EventArgs e) 
{ 
    string SearchQueryStringParameters = @"?SearchParameters="; 
    string SearchURL = "Search.aspx" + SearchQueryStringParameters; 

    Response.Redirect(SearchURL); 
} 

而在你的頁面加載你的Search.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 
    } 
} 

希望這會有所幫助。

4

該函數允許使用GET方法提交頁面。

要使用你需要get方法提交頁面:

  1. 添加此代碼Form.Method = 「搞定」;在Page_Load方法
  2. 使用此代碼< ASP:按鈕RUNAT = 「服務器」 ID = 「btnGenerate」/>作爲提交按鈕
  3. 添加的rel = 「拒收提交」屬性你不想在你的查詢字符串
  4. 改變使用你的頁面的Request.QueryString
  5. 的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; 
}); 
0

在你的。點擊事件發生在表單提交前就用這個:

$("#__VIEWSTATE").remove(); 
    $("#__EVENTVALIDATION").remove(); 
相關問題