簡體   English   中英

如何再次重復相同的ASP.NET MVC操作?

[英]How to repeat the same ASP.NET MVC action again?

我有一個名為List的操作,用於顯示搜索結果。 它通過查詢字符串接收參數,因為它們是可選的。 我的方法簽名如下所示:

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

CategoryID是一個多選框,我正在通過GET請求執行所有操作。 我需要做的是在我的視圖中創建一個指向下一頁的鏈接,但保留相同的搜索參數。 我知道我可以手工構建鏈接,但是可以使用任何內置的路由方法,尤其是當必須將categoryID格式設置為“?categoryID = 1&categoryID = 2&categoryID = 3”來綁定到列表時?

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

對於類別列表,請嘗試s / t,例如categoryIDs=2,3,4,5等,因為RouteValueDictionary不允許重復鍵。 之后,在action方法中將需要將字符串解析為整數列表。

我喜歡將對象作為參數傳遞給搜索操作,然后將參數對象傳遞給視圖。 因此,在控制器中使用如下代碼(請注意,我正在使用Rob Conery的PagedList類 ):

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 <T>:

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

然后,在搜索視圖中,您可以執行以下操作...

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

您應該可以執行以下操作:

默認情況下,應傳遞所有當前值。 我必須嘗試一下,以確保引用的是正確的重載。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM