0

我正在使用ASP.NET MVC,我有一個用戶輸入的搜索表單。提交表單時,表單中的數據會傳遞給我的索引操作,以返回顯示請求數據的視圖。獲取請求MVC查詢字符串

在我的索引操作方法中,我使用輸入的數據更新視圖。

用戶不必輸入表單的所有字段,因此我的操作收到的數據具有空的參數鍵。但我只想要在url中具有值的鍵。

我能得到什麼,不可取的例子:

http://www.domain.com/searchresults?name=&age=&id=98787879

正如你可以看到姓名和年齡有沒有價值。如果我擺脫了地址欄中的那些,正確的數據仍然可以正確顯示,這是預期的。

我想要的網址只是

http://www.domain.com/searchresults?id=98787879

有沒有辦法之前分析查詢字符串是進入操作方法。也許使用Ajax截斷不必要的鍵?但是,我怎麼能提交併轉到頁面?

在這種情況下
+0

它是queryString是您的強制使用?帖子可以是另一個好的選擇。 – FosterZ 2013-02-23 06:26:53

+0

是的查詢字符串是強制性的,所以搜索可能會被標記爲書。 – Rayshawn 2013-02-23 06:35:56

回答

1

,你可以先打電話上的搜索按鈕,點擊一個javascript函數,將構造查詢字符串,URL和火到指定Action

+0

所以讓按鈕功能構造url我想要的方式,並基本上表現爲鏈接? – Rayshawn 2013-02-23 06:48:56

+0

是的,需要點數 – FosterZ 2013-02-23 07:18:25

+0

這是對我的目的最好的方法偉大工程。 – Rayshawn 2013-02-23 20:34:23

1

你可以通過做這個JavaScript,但構建查詢字符串(我假設表單的類型是GET)是瀏覽器的工作,我不會干涉它,或者陷入麻煩,確保您的JavaScript在所有瀏覽器上都能正常工作。儘管效率較低,但我會在您的MVC控制器中使用this.RedirectToAction調用,並將請求重定向到未定義參數的方法的重載(即url只有具有值的參數) 。這樣,用戶的瀏覽器將會有額外的往返行程,因爲它將首先收到來自控制器的重定向響應,但您不需要在客戶端處理JavaScript。

+0

你有一個redirectAction的例子,我不明白'參數是未定義'部分,我如何將新查詢傳遞給重定向操作? redirectAction('controller','Index',querystringdata'); ? – Rayshawn 2013-02-23 07:10:13

+0

我假設你有'MyAction(string parameter1,string parameter2,string parameter3,...)'這樣的東西,當一個參數是空的,它的值是null或string.Empty。對於您的特定示例,「name」將爲空或爲空。如果你訪問'Request'的QueryString屬性,它會給你一個'NameValueCollection'。迭代完成並僅從那些具有值的參數構造'RouteValueDictionary',然後使用接受RouteValueDictionary的RedirectToAction的重載重定向請求。 – Ameen 2013-02-23 18:19:23