将 List<int> 从 actionlink 传递到控制器方法

Pass List<int> from actionlink to controller method

在我的控制器中我有这个:

ViewBag.lstIWantToSend= lstApps.Select(x => x.ID).ToList();  // creates a List<int> and is being populated correctly

我想将该列表传递给另一个控制器..所以在我看来我有:

@Html.ActionLink(count, "ActionName", new { lstApps = ViewBag.lstIWantToSend }, null)

控制器中的方法:

public ActionResult ActionName(List<int> lstApps)   // lstApps is always null

有没有办法将整数列表作为路由值发送到控制器方法?

它不可能直接,但你可以用 Json 如果我有 List<int>

ViewBag.lstIWantToSend= new List<int> {1, 2, 3, 4};

所以我的观点是

@Html.ActionLink(count, "ActionName", new { lstApps = Json.Encode(ViewBag.lstIWantToSend) }, null)

Json.Encode 会将 List<int> 转换为 json string

ActionName会是这样

 public ActionResult ActionName (string lstApps)
        {
            List<int> result = System.Web.Helpers.Json.Decode<List<int>>(lstApps);

            return View();

        }

Json.Decode<List<int>> 会将此 json string 转换回 List<int>

MVC.net 遵循您发送的所有内容都是单个模型的约定。因此,如果您想发送一个对象列表(比如一个人员列表)——最好首先将它们从客户端序列化到服务器,然后再从服务器到客户端。

在简单的事情上,就像@BryanLewis 所说的那样,您可以自己用 CSV 序列化它(到字符串),然后在接收时将其拆分回 Action/Client。 对于更复杂的事情,你有(客户端)像 AngularJS 和它优秀的 JSON.stringify(anyObject)/JSON.parse(anyString) 你有(服务器端)Newton.Soft '出色的 JsonConvert.Deserialize>(myJsonString) 或 JsonConvert.Serialize(someObject)。 json 的好处是它非常透明。

记住 - HTTP 不喜欢对象。但是来回传递字符串很棒。