2011-03-04 5 views

답변

2

성공 메시지를 저장하려면 ViewData를 사용하십시오. 컨트롤러에 성공 메시지를 작성하고보기에서 확인하십시오. 존재하는 경우 렌더링하십시오. 컨트롤러에서

12

, 당신은이 작업을 수행 할 수 있습니다

@if (ViewData["Message"] != null) 
    <div>success</div> 
+11

실제로 완전히 다른 메시지 대신 저장된 메시지를 표시하는 것이 더 합리적이지 않습니까? – Kehlan

0

:

ViewData["Message"] = "Success" 

을 거기 표시하는 메시지이며, 경우보기에 당신은 당신이 확인할 수있는 것보다 있도록하면 표시되는 경우 내 오류와 성공을 동일한 배열/객체에 저장하고보기에 전달하는 경향이 있습니다.

대부분의 내 오류/성공 메시지는 같은 위치에 표시되며 대개 같은 시간에 발생하지 않으므로 일반적으로 문제가되지 않습니다.

나는 사용자 정의 컨트롤이라고 불리는 ShowFeedback()이라는 함수를 가지고 있으며 무엇을 보여줄지 결정하는 논리를 가지고 있습니다. 오류와 성공은 HTML에서 동일하게 표시되며 CSS 만 약간 다릅니다. 당신이 각 요청과 함께 다시 초기화 이후, 도움이되지 않습니다 ViewData보다 다른 페이지에 메시지를 표시하는 경우 그래서 당신은

<div id="feedback" class="error"> 
    Your error message 
</div> 

또는

<div id="feedback" class="success"> 
    Your success message 
</div> 
16

있을 수 있습니다. 반면에 TempData은 두 요청에 대한 데이터를 저장할 수 있습니다. 다음은 그 예이다 : 당신이 리디렉션 (다른 요청을)하고 있기 때문에 당신이 TempData을 사용해야하지만 다른 내부 당신이 ViewData을 사용할 수 있습니다

public ActionResult SomeAction(SomeModel someModel) 
     { 
      if (ModelState.IsValid) 
      { 
       //do something 
       TempData["Success"] = "Success message text."; 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       ViewData["Error"] = "Error message text."; 
       return View(someModel); 
      } 
     } 

블록 if 내부.

@if (ViewData["Error"] != null) 
{ 
    <div class="red"> 
     <p><strong>Error:</strong> @ViewData["Error"].ToString()</p> 
    </div> 
} 
@if (TempData["Success"] != null) 
{ 
    <div class="green"> 
     <p><strong>Success:</strong> @TempData["Success"].ToString()</p> 
    </div> 
} 
+0

ModelState.AddModelError()를 통해 이미 내장되어 있으므로 오류 처리를 다시 구현할 필요가 없습니다. 적은 코드 작성 외에도 유효성 검사 오류가 나타나는 위치 (Html.ValidationSummary() 및 Html.ValidationMessageFor())를 정확하게 제어 할 수 있습니다. 또한 유효성 확인 프레임 워크/플러그인을 사용하면 ModelState 표준을 준수하기 때문에 연결하기가 쉬워집니다. –

+5

@Daniel 동의합니다. 그러나 성공 메시지가 유효성 검사 오류가 아닙니다.) – frennky

+0

마스터 페이지에서이 유형의 메시지보기를 권장합니다. – qub1n

1

TempData는 사전처럼 사용할 수 있습니다 :

그리고 내부는 이런 식으로 뭔가를 할 수 볼 수 있습니다. 저장된 각 값은 현재 요청과 다음 요청에 대해 지속됩니다. 리디렉션에 완벽합니다.

this.TempData["messages"] = "Success!"; 
return RedirectToAction("YourAction"); 
관련 문제