2013-04-11 2 views
6

난 내가 돌아 오면 표시하는 오류 메시지를 보낼 수있는 방법RedirecttoAction는

public ActionResult Impersonate(string id) 
{ 
    string result = ORCA.utilities.users.setImpersonation(id); 
    if(result == "nocommonfields") 
     return RedirectToAction("AdminUsers", "Admin"); 
    else 
     return RedirectToAction("terms_of_use", "Forms"); 
} 

이 그리드에 대한 링크가 AdminUsers 페이지?

답변

23

당신은 TempData

if(result == "nocommonfields") 
{ 
    TempData["ErrorMessage"]="This is the message"; 
    return RedirectToAction("AdminUsers", "Admin"); 
} 

하고 AdminUsers 활동에를 사용할 수 있습니다, 당신은 TempData은 매우 짧은 수명을 가지고, 그것은

public ActionResult AdminUsers() 
{ 
    var errMsg=TempData["ErrorMessage"] as string; 
//check errMsg value do whatever you want now as needed 
} 

기억 읽을 수 있습니다. 세션은 임시 데이터 뒤에있는 백업 저장소입니다.

또는 쿼리 문자열에 플래그를 보내고 다음 작업 방법에서 플래그를 보내고 표시 할 오류 메시지를 결정할 수도 있습니다.

+0

는 기본을 반환 할 수 있습니다 :

보기에
if(result == "nocommonfields") { FlashMessage.Warning("Your error message"); return RedirectToAction("AdminUsers", "Admin"); } 

는 다음과 같은 문장이 이전에 어떤 렌더링 메시지를 대기에 포함 : 다음과 같이 RedirectToAction()를 호출하기 전에 당신은 단순히 메시지를 큐 tempdata의 유효성 검사 오류 및 ValidationMessageFor 요소의 오류 표시? –

2

TempData 컨트롤러 속성을 사용하여 이러한 종류의 기능을 구현할 수 있습니다. 필자의 의견으로는 세션 저장소를 사용하여 내용을 저장한다는 것이 가장 큰 단점입니다. 즉, 웹 팜에서 작동하도록 추가 작업을하거나 처음부터 세션을 켜야 할 필요가 있음을 의미합니다.

TempData에 대한 좋은 점은 그것이 원하는대로 정확하게 수행된다는 것입니다. 그것의 문자열 기반의 사전과 당신은 아무것도 넣을 수 있으며, 기본적으로 그것을 한 번만 꺼내. 따라서 RedirectToAction()으로 전화하기 전에 메시지를 설정하십시오. 다음 요청에서 메시지를 확인하고 표시합니다. 메시지를 검색하여 요청이 끝나면 자동으로 삭제됩니다.

대신 두 가지 요청간에 메시지를 전송할 때 쿠키를 사용할 수 있습니다. 본질적으로 자신의 솔루션을 굴리거나 쿠키를 통해 TempData의 내용을 전송하는 사용자 정의 ITempDataProvider을 구현할 수 있습니다. 쿠키를 안전하게 보호해야합니다. MachineKey.Protect()은 자신의 롤링을하는 데 도움을 줄 수 있습니다.

동일한 문제에 직면하여 FlashMessage이라는 솔루션을 만들었습니다. 아마도 이것은 당신에게 어떤 작업을 저장할 수 있습니다. NuGet에서도 볼 수 있습니다. 사용법은 간단하다

@Html.RenderFlashMessages() 
+0

좋은 해결책, 또 다른 가능성은 querystring (물론 민감한 데이터가 아닐 경우)으로 전송하는 것입니다. 민감한 데이터 인 경우에도 쿠키에 저장하는 것에 대해서는 확신 할 수 없지만 (machineKey로 암호화 된 경우에도) 그리고 이런 종류의 생각은 내가 그것을 사용하는 것을 싫어하더라도 TempData를 사용하게한다. :) 그러나 당신의 확장자 이름은 FlashMESSAGE이고 나는 쿠키 lol에 신용 카드 번호를 저장할 의도가 없다고 생각한다. – sotn