2011-10-18 2 views
0

I 한 컨트롤러 (2 개) 동작 방법을 가지고MVC 유효성 및 오류 처리 사이클

인덱스 :

public ActionResult Index(string url) 
{ 
    // take the url as a param and do long tasks here 
    ViewBag.PageTitle = "title"; 
    ViewBag.Images = "images"; 
    // and some more view bags 
    return View(); 
} 

이 인덱스보기 같은 제어기의 다른 방법으로 배치 한 형태를 포함한다. 뭔가를 PostMessage 방법에서 잘못된 경우 인덱스보기로 다시 돌아가, 또한 양식 필드를 취소하지 않는 플러스를 PostMessage 방법은 지정된 오류 메시지를 표시하는 방법

public ActionResult PostMessage(string msg, string imgName) 
{ 
    // save data in the db 
    // but on error I want to navigate back to the Index view but without losing data the user fielded before submit the form. 
    // Also need to pass an error message to this index view to show 
} 

.

이러한 시나리오를 수행하는 가장 좋은 방법을 알아야합니다.

답변

1

가장 좋은 방법은 양식에 대한 뷰 모델 유형을 작성하는 것이있다. 해당 모델의 속성에 속성을 추가하여 "잘못된"것으로 정의하십시오. 양식에서 다양한 필드 인 @Html.TextBoxFor과 같은 메소드를 사용하십시오. 그런 다음 메시지 및 이미지 이름을 직접 가져 오는 대신 PostMessage 클래스에서 해당 유형의 객체를 가져 오게하십시오. 그런 다음 모델의 유효성을 검사하고 모델이 유효하지 않으면 뷰를 다시 반환 할 수 있습니다.

이 패턴 다음에 오는 몇 가지 코드 예제는 http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx을 참조하십시오.

1

당신은 당신이 반환 할 뷰의 이름을 지정할 수 있습니다 :

public ActionResult PostMessage(string msg, string imgName) 
{ 
    if (SomeErrorWhileSavingInDb) 
    { 
     // something wrong happened => we could add a modelstate error 
     // explaining the reason and return the Index view. 
     ModelState.AddModelError("key", "something very wrong happened when trying to process your request"); 
     return View("Index"); 
    } 

    // everything went fine => we can redirect 
    return RedirectToAction("Success"); 
} 
+0

그리고 내가보기에 인덱스 메소드에서 보내고 자하는 ViewBag에 대해,이 경우 null입니다. –

+1

@Amr ElGarhy, 같은보기를 다시 표시하는 경우'PostMessage'에서 다시 설정해야합니다. 그런데 당신은 어떤 ViewBag도 사용하지 말아야합니다. 뷰 모델을 사용하는 것이 좋습니다. –

0

그냥 다시

return RedirectToAction("Index"); 

당신이 경로 값과 기타 정보를 전달 할 수 있습니다이 방법에 대한 오버로드가 있습니다 색인 작업을 리디렉션합니다.

+0

이렇게하면 사용자가 입력 필드에 입력 한 모든 값이 손실됩니다. 서버 측 오류가있을 때마다 다시 시작해야하는 경우 일종의 성가신 일입니다. –