簡體   English   中英

帶有字符串數組的 URL.Action?

[英]URL.Action with a string array?

我有一個字符串數組,我需要在 Url.Action 的查詢字符串中傳遞這些字符串。

Url.Action("Index", "Resource", new { FormatIds = Model.FormatIDs})

現在,該鏈接在我的瀏覽器中顯示為 System.String[] 而不是查詢字符串。 是否可以讓 MVC 通過模型綁定自動執行此操作?

我需要它與我的控制器操作綁定,例如:

public ActionResult Index(string[] formatIDs)

要使用默認活頁夾獲取要自動綁定的字符串列表,您需要將它們提供為:

name=value&name=value2&name=value3

所以你需要將你的列表轉換成類似的東西:

Index?formatIDs=1&formatIDs=2&formatIDs=3

要使用默認模型聯編程序,您最終應該得到如下內容:

Index?formatIDs=value1&formatIDs=value2&formatIDs=value3

您可以返回一個名為 HttpValueCollection 的私有集合,即使文檔說它是一個使用 ParseQueryString 實用程序的 NameValueCollection。 然后手動添加密鑰,HttpValueCollection 為您進行編碼。 然后只需手動附加 QueryString:

var qs = HttpUtility.ParseQueryString(""); 
new string[] { "value1", "value2", "value3" }.ToList().ForEach(x => qs.Add("formatIDs", x));

Url.Action("Index", "Resource")?@qs

還有另一種使用帶有數組的 RouteValueDictionary 的方法:

@{
   var parameters = new RouteValueDictionary();

   for (var i = 0; i < Model.CustomList.Count; ++i)
   {
       parameters.Add($"customListId[{i}]", Model.CustomList[i]);
   }
}

用法:

var url = '@Html.Raw(Url.Action("ControllerActioon", "Controller", parameters))';

仍然不是很優雅 - 但工作。

暫無
暫無

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

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