Передайте 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 не любит объекты. Но это здорово с передачей струн туда и обратно.

Другие вопросы по тегам