2013-06-12 2 views
1

유효성 검사가 포함 된 Ajax 양식이 있습니다. 내 문제는 내 POST 작업이다, 나는 모델이 유효 할 때하는 일의Ajax 양식, 유효성 검사 및 오류

[HttpPost] 
public ActionResult AddUpdateConfigs(StorageConfigurationModel modelbind) 
{ 
    if (ModelState.IsValid) 
    { 
     //blablabla more code 
    } 
    else 
    { 
     return PartialView("cbpnlNewUpdateConfigs",modelbind); 
    } 
} 

한 예를 들어, 값을 사용하려고, UNC 경로 나 있고, 그 경우 볼 필요가 UNC 경로가 존재, 그래서 수행

try 
    { 
     DirectoryInfo dir = new DirectoryInfo(modelbind.Location); 
     if (dir.Exists) 
     { 
      //bla bla bla 
     } 
     else 
     { 
      return //something I dont know what 
     } 
    } 
    catch (Exception j) 
    { 
     return //something I dont know what 
    } 

그래서 나는 Action 유형과 일치하는 반환 할 올바른 것이 무엇인지 잘 모릅니다 또한 클라이언트 측에서 적절한 메시지를 가지고있다.

아이디어가 있으십니까?

답변

2

에게 도움이 : 여기

ModelState.AddModelError(string.Empty, "Path does not exist."); 

의 핵심은 ModelState.AddModelError에 대한 keystring.Empty을 사용하는 것입니다.

그리고보기에 표시 : 당신이 당신의 모델 (!ModelState.IsValid) 유효하지 않은 경우에 사용하는 동일한 뷰를 사용할 수 있습니다

@Html.ValidationSummary() 

이 방법을.

출처 : ModelState.AddModelError - How can I add an error that isn't for a property?

+0

솔루션과 비슷하지만 데이터를 DB에 추가 할 때 성공했다고 말하는데 무엇을 반환해야합니까? – AAlferez

+0

오류가있을 때 일부 HTML 컨테이너 요소에 응답 (부분보기)을 채우고 있다고 가정합니다. 모든 것이 정상이면 다른 부분 뷰를 반환 할 수 있습니다. – polkduran

+0

그래도 내 onSuccess 기능이 실행되지 않습니다 – AAlferez

0

첫 번째 조건은 HttpStatusCode 열거 형을 사용하고 NotFound 상수를 사용할 수 있습니다. 당신은 당신이 특정 HTTP 오류 응답 코드를 사용하려는 경우를 제외하고는 정확히 알 필요가있는 예외

http://msdn.microsoft.com/en-us/library/system.net.httpstatuscode.aspx

.

그렇지 않으면 InternalServerError를 사용하여 일반 서버 오류가 발생했음을 나타낼 수 있습니다.

희망이 당신은 당신의 ModelState에 오류를 추가 할 수 있습니다

Shahbaz

0

당신은 Success 특성을 가진 JsonResult을 반환하고 수 중 하나를 당신이 당신의 아약스 응답 객체에서 읽을 수있는보기 또는 오류 MessageHtml : 이후

[HttpPost] 
    public JsonResult AddUpdateConfigs(StorageConfigurationModel modelbind) 
    { 
     if(!allowed) { 
      return Json(new { Success = false, Message = "blah blah blah"}, JsonRequestBehavior.DenyGet); 
     } 
     else 
     { 
      return Json(new {Success = true, Html = RenderPartialView("cbpnlNewUpdateConfigs", model)}, JsonRequestBehavior.DenyGet); 
     } 
    } 

    public static class PartialViewHelper 
     { 
      public static string RenderPartialView(this Controller controller, string viewName, object model) 
      { 
       if (string.IsNullOrEmpty(viewName)) 
        viewName = controller.ControllerContext.RouteData.GetRequiredString("action"); 

       controller.ViewData.Model = model; 
       using (var sw = new StringWriter()) 
       { 
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(controller.ControllerContext, viewName); 
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
        viewResult.View.Render(viewContext, sw); 

        return sw.GetStringBuilder().ToString(); 
       } 
      } 

      public static string RenderView(this Controller controller, string viewName, object model) 
      { 
       if (string.IsNullOrEmpty(viewName)) 
        viewName = controller.ControllerContext.RouteData.GetRequiredString("action"); 

       controller.ViewData.Model = model; 
       using (var sw = new StringWriter()) 
       { 
        ViewEngineResult viewResult = ViewEngines.Engines.FindView(controller.ControllerContext, viewName, String.Empty); 
        var viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, sw); 
        viewResult.View.Render(viewContext, sw); 

        return sw.GetStringBuilder().ToString(); 
       } 
      } 
     } 
0

그것은 아약스 호출, JSON 형식으로 응답을 보낼 수 있습니다.

if(someConditionTrue) 
{ 
    //Make changes to DB 
    return Json(new { Status="Success"}); 
} 
else 
{ 
return Json(new { Status="Error", Message="Directory not found"}); 
} 

클라이언트 측에서 결과를 확인하고 사용자에게 적절한 정보를 표시 할 수 있습니다.

$.post("someValidUrl",$("#form1").serialize(),function(response){ 
    if(response.Status=="Error") 
    { 
    alert(response.Message); 
    } 
}); 

당신은 (성공의 경우) JSON 결과에서 부분보기의 마크 업을 보내고 당신이 가진 콘텐츠를 업데이 트하려는 사업부의 HTML을 대체하기 위해 그것을 사용할 수 있습니다. 그렇게하는 확장 방법은 this answe r을 확인하십시오.

+0

그러면 유효성 검사는 어떻게됩니까? 나타날 수 없습니다 – AAlferez

+0

JSON 데이터에서도 유효성 검사 메시지를 보낼 수 있습니다. – Shyju

+0

다음과 같은 유효성 검사 오류가 발생할 수 있습니다. http://stackoverflow.com/questions/15296069/how-to-figure-out-which-key-of-modelstate-has-error/15296109#15296109 – Shyju