Как передать список в Redirecttoaction
Я хочу передать более одного параметра из метода RedirectToAction
как я могу пройти?
Мой единственный метод действий
[HttpPost, ActionName("SelectQuestion")]
public ActionResult SelectQuestion(string email,List<QuestionClass.Tabelfields> model)
{
List<QuestionClass.Tabelfields> fadd = new List<QuestionClass.Tabelfields>();
for (int i = 0; i < model.Count; i++)
{
if (model[i].SelectedCheckbox == true)
{
List<QuestionClass.Tabelfields> f = new List<QuestionClass.Tabelfields>();
fadd.Add(model[i]);
}
}
return RedirectToAction("Question", new { email = email, model = fadd.ToList() });
}
Мой другой метод действий
[HttpGet]
public ActionResult Question(string email,List<QuestionClass.Tabelfields> model)
{
}
Я не получаю значения в модели.
Ответы
Ответ 1
Вы не можете передавать сложные объекты в URL-адресах при перенаправлении.
Одной из возможностей было бы использовать TempData:
TempData["list"] = fadd.ToList();
return RedirectToAction("Question", new { email = email});
а затем внутри действия "Вопрос":
var model = TempData["list"] as List<QuestionClass.Tablefields>;
Ответ 2
Это, вероятно, уже не активнее, но я оставлю, как я сделал это здесь, чтобы помочь кому-то другому.
Я решил это, используя простой 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){}
Ответ 3
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
из идентификатора
Ответ 4
То, как я решил эту проблему, состоял в том, чтобы сериализовать список на объект 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);
}