Как передать список в 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);
}