2010-05-28 150 views
1

我正在asp.net mvc的網站上工作。我必須展示一個視圖,用戶在其中放置一些搜索值,例如標籤和標題以進行搜索。我想爲此使用相同的Index方法。我有 使我的表單使用formMethod.Get發送參數作爲查詢字符串。FormMethod.Get和查詢字符串參數

所以這裏是方法

[HttpGet] 
    public ActionResult Index(string title, string tags, int? page) 
    { 
     if (string.IsNullOrEmpty(title) 
      return View(null); 

     var list = GetSomeData(); 

     return View(list); 

    } 

這裏是我的看法

<div id="searchBox"> 
       <% using (Html.BeginForm(null, null, FormMethod.Get)) 
        { %> 
       <table> 
        <tr> 
         <td> 
          <input type="hidden" id="isPosted" name="isPosted" value="1" /> 
           I am looking for 
           <%=Html.TextBox("Title")%> 
           Tags: 
           <%=Html.TextBox("Tags")%> 
           <input id="search" type="submit" value="Search" /> 
          </td> 
        </tr> 
       </table> 
       <% } %> 

因此,當用戶第一次訪問該頁面時,他只能看到兩個文本boxs和一個按鈕。但是當他在標題和標籤中鍵入內容並單擊搜索按鈕時,我將用一些數據加載視圖。

現在的問題是,當我在標題和標籤框中鍵入內容並單擊搜索時,它們在方法中收到,但在url中不可見。有什麼我做錯了。

幫助將不勝感激。

問候

成員Parminder

回答

0

這不是striclty更多的我會做什麼,而不是一個建議的回答您的具體問題。

對於這種類型的功能,我會使用jQuery對輸入的數據進行部分回傳。然後,我會將局部視圖返回到視圖並進行渲染。

聽起來很複雜,但事實並非如此。這就給了你一個平滑的搜索功能,整個頁面從不張貼,所以它看起來更加清晰。

jQuery做一個職位看起來像這樣;

$.post("/articles/getFilteredTagList", { filter: tagString }, function(newHTML) { 
    document.getElementById("tagList").innerHTML = newHTML; 
}); 

newHTML將包含表示局部視圖的呈現html。

在你的控制器中你有類似的東西;

public ActionResult getFilteredTagList(string filter) 
{ 
    return PartialView("TagList",new Repository.KeywordsRepository().All().OrderBy(k => k.keyword1)); 
} 

在上面的代碼中,你基本上是指示mvc渲染局部視圖並返回html。這個html是你再次返回到你的視圖,然後你可以用新的html替換div的內部。

您的部分視圖可能包含其他控件,這些控件現在對已加載的數據可見。

0

我不明白關於「現在的問題是當我在標題和標籤框中鍵入內容並單擊搜索時,它們在方法中收到,但在URL中不可見」部分。

使用POST或GET發送數據。你已經指定了GET,並且我沒有看到任何重定向或AJAX調用,所以我不確定你爲什麼沒有在URL中看到它。

-

請嘗試下面的鏈接示例代碼。希望有幫助。

http://weblogs.asp.net/rajbk/archive/2010/05/08/asp-net-mvc-paging-sorting-filtering-using-the-mvccontrib-grid-and-pager.aspx

+0

他可能令人困惑的mvc與webforms是我認爲它可能是 – griegs 2010-05-28 04:14:50

+0

也許他意味着ist不是可見的URL的路由部分,但只在查詢字符串。 – 2010-05-28 09:58:49

+0

它的mvc,但當我張貼表格。這些參數不是url字符串的一部分。我所做的是手動添加使用JavaScript的所有參數,並將location.href設置爲相同的方法。 – Parminder 2010-05-29 03:42:23

2

我建議你分裂兩個控制器操作:

public ActionResult Index() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult Index(string title, string tags, int? page) 
{ 
    var list = GetSomeData(title, tags, page); 
    return View(list); 
} 

在這種情況下,你肯定不再需要你的表單裏面的隱藏字段:

<% using (Html.BeginForm()) { %> 
    I am looking for 
    <%= Html.TextBox("Title") %> 

    Tags: 
    <%= Html.TextBox("Tags") %> 

    <input id="search" type="submit" value="Search" /> 
<% } %> 
+0

即使這個不顯示參數。 – Parminder 2010-05-29 03:40:15

+0

@parminder,你期望在那裏顯示這些參數?我以爲你在提交表單時正在討論瀏覽器中的地址欄。在這種情況下,一旦你點擊提交按鈕,用戶就可以瀏覽到http://yoursite.com/home/index?Title = foo&Tags = bar',其中可以清楚地看到參數及其值。你能更具體地說明你想做什麼嗎? – 2010-05-29 06:32:35