Programming

요청 데이터를 잃지 않고 ASP.NET MVC에서 ToAction을 리디렉션하는 방법

procodes 2020. 7. 14. 21:33
반응형

요청 데이터를 잃지 않고 ASP.NET MVC에서 ToAction을 리디렉션하는 방법


ASP.NET MVC를 사용하면 상황 제출 (예 : 양식 제출)이 필요할 수 있습니다 RedirectToAction.

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

POST유효성 검사뿐만 아니라 사용자 편의를 위해 원래 ed 데이터 를 포함하는 양식이 필요하므로 어떻게 데이터를 전달할 수 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 {
    //
    ...
}

임시 데이터를 피하는 다른 방법이 있습니다. 내가 좋아하는 패턴은 원래 렌더링과 유효하지 않은 폼의 다시 렌더링 모두에 대해 하나의 액션을 만드는 것과 관련이 있습니다. 다음과 같이 진행됩니다.

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 개의보기를 작성할 수 있습니다.

When the posting to this action, if its valid it transfers control over to another action.

I'm trying to make this pattern easy in the .net validation framework as we build out support for MVC.


If you want to pass data to the redirected action, the method you could use is:

return RedirectToAction("ModelUpdated", new {id = 1});
// The definition of the action method like  public ActionResult ModelUpdated(int id);

참고URL : https://stackoverflow.com/questions/1936/how-to-redirecttoaction-in-asp-net-mvc-without-losing-request-data

반응형