Подтвердить что ты не робот

Можем ли мы передать модель в качестве параметра в RedirectToAction?

Я хочу знать, существует какая-либо методика, поэтому мы можем передать Model в качестве параметра в RedirectToAction

Пример:

public class Student{
    public int Id{get;set;}
    public string Name{get;set;}
}

контроллер

public class StudentController : Controller
{
    public ActionResult FillStudent()
    {
        return View();
    }
    [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return RedirectToAction("GetStudent","Student",new{student=student1});
    }
    public ActionResult GetStudent(Student student)
    {
        return View();
    }
}

Мой вопрос. Могу ли я передать студенческую модель в RedirectToAction?

4b9b3361

Ответ 1

Использование TempData

Представляет набор данных, которые сохраняются только с одного запроса на Следующий

[HttpPost]
public ActionResult FillStudent(Student student1)
{
    TempData["student"]= new Student();
    return RedirectToAction("GetStudent","Student");
}

[HttpGet]
public ActionResult GetStudent(Student passedStd)
{
    Student std=(Student)TempData["student"];
    return View();
}

Альтернативный способ Передайте данные с помощью строки запроса

return RedirectToAction("GetStudent","Student", new {Name="John", Class="clsz"});

Это создаст запрос GET, например Student/GetStudent?Name=John & Class=clsz

Убедитесь, что метод, который вы хотите перенаправить, украшен [HttpGet] как вышеуказанный RedirectToAction выдаст запрос GET с статусом http код 302 Найдено (общий способ выполнения перенаправления URL)

Ответ 2

Просто вызовите действие без необходимости для redirect to action или ключевого слова new для модели.

 [HttpPost]
    public ActionResult FillStudent(Student student1)
    {
        return GetStudent(student1); //this will also work
    }
    public ActionResult GetStudent(Student student)
    {
        return View(student);
    }

Ответ 3

Да, вы можете передать модель, которую вы показали, используя

return RedirectToAction("GetStudent", "Student", student1 );

Предполагая, что student1 является экземпляром Student

который будет генерировать следующий URL-адрес (если вы используете маршруты по умолчанию, а значение student1 - ID=4 и Name="Amit")

.../Student/GetStudent/4?Name=Amit

Внутренне метод RedirectToAction() создает RouteValueDictionary с использованием значения .ToString() каждого свойства в модели. Однако привязка будет работать только в том случае, если все свойства в модели являются простыми свойствами, и она терпит неудачу, если какие-либо свойства являются сложными объектами или наборами, потому что метод не использует рекурсию. Если, например, Student содержит свойство List<string> Subjects, тогда это свойство приведет к строковому значению запроса

....&Subjects=System.Collections.Generic.List'1[System.String]

и привязка завершится с ошибкой, и это свойство будет null

Ответ 4

  [HttpPost]
    public async Task<ActionResult> Capture(string imageData)
    {                      
        if (imageData.Length > 0)
        {
            var imageBytes = Convert.FromBase64String(imageData);
            using (var stream = new MemoryStream(imageBytes))
            {
                var result = (JsonResult)await IdentifyFace(stream);
                var serializer = new JavaScriptSerializer();
                var faceRecon = serializer.Deserialize<FaceIdentity>(serializer.Serialize(result.Data));

                if (faceRecon.Success) return RedirectToAction("Index", "Auth", new { param = serializer.Serialize(result.Data) });

            }
        }

        return Json(new { success = false, responseText = "Der opstod en fejl - Intet billede, manglede data." }, JsonRequestBehavior.AllowGet);

    }


// GET: Auth
    [HttpGet]
    public ActionResult Index(string param)
    {
        var serializer = new JavaScriptSerializer();
        var faceRecon = serializer.Deserialize<FaceIdentity>(param);


        return View(faceRecon);
    }

Ответ 5

Я нашел что-то вроде этого, помогает избавиться от жестко закодированных тегов tempdata​​p >

public class AccountController : Controller
{
    [HttpGet]
    public ActionResult Index(IndexPresentationModel model)
    {
        return View(model);
    }

    [HttpPost]
    public ActionResult Save(SaveUpdateModel model)
    {
        // save the information

        var presentationModel = new IndexPresentationModel();

        presentationModel.Message = model.Message;

        return this.RedirectToAction(c => c.Index(presentationModel));
    }
}