IT박스

RedirectToAction에서 모델을 매개 변수로 전달할 수 있습니까?

itboxs 2020. 12. 30. 07:53
반응형

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에서 학생 모델을 전달할 수 있습니까?


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이 http 상태 코드 302 Found (URL 리디렉션을 수행하는 일반적인 방법)와 함께 GET 요청을 발행하므로 리디렉션하려는 메서드가 장식되어 있는지 확인합니다.


필요하지 않은 액션 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);
    }

예, 당신이 사용하여 보여준 모델을 전달할 수 있습니다

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

student1의 인스턴스 라고 가정Student

다음 URL을 생성합니다 (기본 경로를 사용하고 값 student1ID=4이라고 가정 Name="Amit")

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

내부적으로 RedirectToAction()메서드 는 모델의 각 속성 값을 RouteValueDictionary사용하여 a 빌드합니다 .ToString(). 그러나 바인딩은 모델의 모든 속성이 단순 속성 인 경우에만 작동하고 메서드가 재귀를 사용하지 않기 때문에 속성이 복잡한 개체 또는 컬렉션이면 실패합니다. 예를 들어 Student속성이 포함 된 List<string> Subjects경우 해당 속성은 다음과 같은 쿼리 문자열 값이됩니다.

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

바인딩이 실패하고 해당 속성은 null


  [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);
    }

나는 이와 같은 것을 찾았고, 하드 코딩 된 tempdata 태그를 제거하는 데 도움이되었습니다.

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));
    }
}

참조 URL : https://stackoverflow.com/questions/22505674/can-we-pass-model-as-a-parameter-in-redirecttoaction

반응형