.NET Passing List для перенаправления действий [duplicate]

Не обрезайте [], и все должно быть в порядке. [] идентифицируют массив JSON, который именно то, что вам нужно, чтобы выполнять итерацию его элементов.

11
задан Ajay Punekar 24 August 2012 в 12:42
поделиться

4 ответа

Это, вероятно, уже неактивно, но я оставлю, как я сделал это здесь, чтобы помочь кому-то другому.

Я решил это, используя простой Redirect вместо RedirectToAction:

List<int> myList = myListofItems;
var list = HttpUtility.ParseQueryString("");
myList.ForEach(x => list.Add("parameterList", x.ToString()));
return Redirect("/MyPath?" + list);

Затем по вашему другому методу:

public ActionResult Action(List<int> parameterList){}
4
ответ дан Mr.Hunt 21 August 2018 в 14:26
поделиться

RedirectToAction метод Возвращает ответ HTTP 302 браузеру, что заставляет браузер делать запрос GET для указанного действия.

Вы должны либо хранить данные во временном хранилище, например TempData / Session. TempData использует Session в качестве хранилища резервных копий.

Если вы хотите сохранить его в реальном состоянии без учета состояния, вы должны передать идентификатор в строке запроса и Получить список элементов в своем действии GET. Истинный безграждан.

return RedirectToAction("Question", new { email = email,id=model.ID });

и в вашем методе GET

public ActionResult Question(string email,int id)
{

   List<QuestionClass.Tabelfields> fadd=repositary.GetTabelFieldsFromID(id);
    //Do whatever with this
   return View();
}

Предполагая, что repositary.GetTabelFieldsFromID возвращает список из TabelFields из идентификатора

1
ответ дан Shyju 21 August 2018 в 14:26
поделиться
  • 1
    Есть ли опция для этого возврата RedirectToAction («Вопрос», новый {email = email, model = fadd.ToList ()}); Я не получил то, что хочу от вашего ответа. Я хочу передать электронную почту и список. Спасибо – Ajay Punekar 24 August 2012 в 14:00
  • 2
    @Ajay: Как я сказал вам, это перенаправление (новый HTTP-запрос, вы не можете передать такой сложный объект, как он есть). вам нужно попробовать любой из вышеперечисленных подходов (временное хранилище / запрос). Помните, что HTTP не имеет статуса. – Shyju 24 August 2012 в 14:06

Вы не можете передавать набор сложных объектов в URL-адресах при перенаправлении.

. Одна из возможностей - использовать TempData:

TempData["list"] = fadd.ToList();
return RedirectToAction("Question", new { email = email});

, а затем внутри действия «Вопрос»:

var model = TempData["list"] as List<QuestionClass.Tablefields>;
21
ответ дан Stephen Muecke 21 August 2018 в 14:26
поделиться
  • 1
    На самом деле мне нужен идентификатор электронной почты и модель в Url. как я могу его получить? – Ajay Punekar 24 August 2012 в 13:39

Как я решил эту проблему, это сериализовать список на объект JSON, используя метод JsonConvert из пакета Newtonsoft.Json nuget. Затем сериализованный список может быть передан как параметр и затем снова десериализован для повторного создания исходного списка.

Итак, в вашем методе SelectQuestion вы должны использовать этот код:

return RedirectToAction("Question", 
    new { 
        email = email, 
        serializedModel = JsonConvert.SerializeObject(fadd.ToList()) 
    });

И в вашем методе «Вопрос» вы использовали бы этот код для десериализации объекта.

[HttpGet]
public ActionResult Question(string email, string serializedModel)
{
    // Deserialize your model back to a list again here.
    List<QuestionClass.Tabelfields> model = JsonConvert.DeserializeObject<List<QuestionClass.Tabelfields>>(serializedModel);
}

Важно, это добавляет модель в качестве параметра строки запроса к вашему URL-адресу, поэтому делайте это только с помощью простых простых объектов , иначе ваш url будет слишком длинным.

1
ответ дан Tim Pickin 21 August 2018 в 14:26
поделиться
  • 1
    безусловно наименее неприятное решение – matthy 3 May 2018 в 14:02
Другие вопросы по тегам:

Похожие вопросы: