Передайте List<int> из actionlink в метод контроллера
В моем контроллере у меня есть это:
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
Есть ли способ отправить список целых как значение маршрута в метод контроллера?
2 ответа
Это невозможно напрямую, но вы можете сделать это с 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 работает над соглашением, что все, что вы отправляете, является единой моделью. Поэтому, если вы хотите отправить список объектов (скажем, List of Persons) - было бы неплохо сначала сериализовать их как с клиента на сервер, так и с сервера на клиент.
На простых вещах, как сказал @BryanLewis, вы можете просто сериализовать его самостоятельно с помощью CSV (в строку), а затем разделить его на получающем Action/Client. Для более сложных вещей у вас есть (на стороне клиента) такие вещи, как AngularJS с его превосходным JSON.stringify(anyObject)/JSON.parse(anyString) и у вас есть (на стороне сервера) превосходный JsonConvert.Deserialize> Newton.Soft> (myJsonString) или JsonConvert.Serialize(SomeObject). Хорошая особенность JSON в том, что он очень прозрачный.
Имейте в виду - HTTP не любит объекты. Но это здорово с передачей струн туда и обратно.