2009-02-04 48 views
2

我有一個名爲List的動作,顯示搜索結果。它通過查詢字符串接收參數,因爲它們是可選的。我的方法簽名如下所示:如何再次重複相同的ASP.NET MVC操作?

public ActionResult List(List<int> categoryIDs, string school, int? stateID, int? page) 

CategoryIDs是一個多選擇框,我所做的一切都在一個GET請求。我需要做的是在我的視圖中創建一個鏈接到下一頁,但保留相同的搜索參數。我知道我可以手動建立鏈接,但是可以使用任何內置路由方法,尤其是當categoryID必須格式化爲「?categoryID = 1 & categoryID = 2 & categoryID = 3」列表?

回答

1

我認爲沒有ActionLink過載可以幫助你在默認情況下做到這一點。您需要使用要包含的參數填充RouteValueDictionary實例。

關於類別的列表,請嘗試像categoryIDs=2,3,4,5等s/t等,因爲RouteValueDictionary不允許重複密鑰。之後,在action方法中需要將字符串解析爲整數列表。

0

你應該能夠做到這一點:

所有電流值應在默認情況下通過。我不得不嘗試一下,以確保我引用了正確的過載。

+0

它沒有拿起額外的參數。我的鏈接以/ Program/List?page = 2而不是/ Program/List?categoryIDs = 2&categoryIDs = 3&categoryIDs = 4&categoryIDs = 5&school =&stateID =&page = 2 – Jonathan 2009-02-05 05:02:56

+0

@Haacked,你知道他們正在重新制作電影頭像?塞繆爾·傑克遜將扮演那個傢伙。 – mmcdole 2009-02-05 08:46:21

0

我喜歡傳遞一個對象作爲參數來搜索動作,然後將參數對象傳遞給視圖。因此,在您的控制器像這樣的代碼(注意:我使用的是Rob Conery's PagedList class):

public class SearchParameters { 
    public string School { get; set; } 
    public int? StateID { get; set; } 
    public int? Page { get; set; } 

    public SearchParameters GetPage(int page) { 
     return new SearchParameters { 
      School = School, 
      StateID = StateID, 
      Page = page 
     }; 
    } 
} 

public class SearchViewModel { 
    public PagedList<[YourResultType]> Results { get; set; } 
    public SearchParameters Parameters { get; set; } 
} 

// ... 

public ActionResult Search(SearchParameters parameters) { 
    IQueryable<[YourResultType]> query; 
    // ... do some stuff to get your search results 

    return View("Search", new SearchViewModel { 
     Results = query.ToPagedList(parameters.Page - 1), 15), 
     Parameters = parameters 
    }); 
} 

所以,你的搜索查看從一般的ViewPage <牛逼>繼承與頁面的聲明是這樣的:

<%@ Page ... Inherits="ViewPage<SearchViewModel>" %> 

然後在你的搜索視圖中,你可以做這樣的事情...

<% for(int i = 0; i < Model.Results.TotalPages; i++) { %> 
    <%= Html.ActionLink(i + 1).ToString(), "Search", 
     Model.Parameters.GetPage(i + 1)) %> 
<% } %> 
相關問題