요청 데이터를 잃지 않고 ASP.NET MVC에서 RedirectToAction을 수행하는 방법

StackOverflow https://stackoverflow.com/questions/1936

  •  08-06-2019
  •  | 
  •  

문제

ASP.NET MVC를 사용하면 양식 제출과 같은 상황이 발생할 수 있습니다. RedirectToAction.

그러한 상황 중 하나는 양식을 제출한 후 유효성 검사 오류가 발생하여 양식으로 다시 리디렉션해야 하지만 제출한 작업 페이지가 아닌 양식의 URL을 URL에 반영하려는 경우입니다.

원본을 포함하는 양식이 필요하기 때문에 POST사용자 편의와 검증 목적을 위해 데이터를 어떻게 전달합니까? RedirectToAction()?viewData 매개변수를 사용하면 내 POST 매개변수는 다음과 같이 변경됩니다. GET 매개변수.

도움이 되었습니까?

해결책

해결책은 TempData 속성을 사용하여 원하는 요청 구성 요소를 저장하는 것입니다.

예를 들어:

public ActionResult Send()
{
    TempData["form"] = Request.Form;
    return this.RedirectToAction(a => a.Form());
}

그런 다음 "양식" 작업에서 다음을 수행할 수 있습니다.

public ActionResult Form()
{
    /* Declare viewData etc. */

    if (TempData["form"] != null)
    {
        /* Cast TempData["form"] to 
        System.Collections.Specialized.NameValueCollection 
        and use it */
    }

    return View("Form", viewData);
}

다른 팁

TempData는 세션에 양식 컬렉션을 저장한다는 점을 명심하세요.해당 동작이 마음에 들지 않으면 새로운 ITempDataProvider 인터페이스를 구현하고 임시 데이터 저장을 위한 다른 메커니즘을 사용할 수 있습니다.세션 상태 사용이 당신에게 해를 끼친다는 사실(측정 및 프로파일링을 통해)을 알지 않는 한 나는 그렇게 하지 않을 것입니다.

보세요 MVCContrib, 다음과 같이 할 수 있습니다.

using MvcContrib.Filters;

[ModelStateToTempData]
public class MyController : Controller {
    //
    ...
}

임시 데이터를 피하는 또 다른 방법이 있습니다.내가 좋아하는 패턴은 원본 렌더링과 유효하지 않은 양식의 다시 렌더링 모두에 대해 1개의 작업을 생성하는 것입니다.다음과 같이 진행됩니다.

var form = new FooForm();

if (request.UrlReferrer == request.Url)
{
     // Fill form with previous request's data
}

if (Request.IsPost())
{
     if (!form.IsValid)
     {
         ViewData["ValidationErrors"] = ...
     } else {
         // update model
         model.something = foo.something;
         // handoff to post update action
         return RedirectToAction("ModelUpdated", ... etc);
     }
}

// By default render 1 view until form is a valid post
ViewData["Form"] = form;
return View();

그것은 다소간 패턴입니다.약간의 의사.이를 통해 양식 렌더링, 값 다시 표시(양식이 이전 값으로 채워지므로) 및 오류 메시지 표시를 처리하는 1개의 보기를 만들 수 있습니다.

이 작업을 게시할 때 유효한 경우 제어권이 다른 작업으로 이전됩니다.

저는 이 패턴을 쉽게 만들려고 노력 중입니다. .net 유효성 검사 프레임워크 MVC에 대한 지원을 구축하면서.

리디렉션된 작업에 데이터를 전달하려는 경우 사용할 수 있는 방법은 다음과 같습니다.

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top