2010-12-09 4 views
0

버튼을 어떻게 내 DataAnnotation 작업 내가 성공 또는 오류 메시지를받을 수 있도록 서버 측에서 아약스 통화를 처리하는 컨트롤러 쪽에서 mvc3 ajax 제출. 방법?

를 클릭하면 이해가되지 않습니다. 나는 (나는 JQuery와 함께 연주 이후 오랜만이야) 정확히 기억 경우

<script src="../../../../Content/Scripts/jquery-1.4.4-vsdoc.js" type="text/javascript"></script 
<script type="text/javascript"> 

    $(function() 
    { 
     $("#createButton").click(function() 
     { 
      var profile = { 
       FirstName: $("#FirstName").val(), 
       LastName: $("#LastName").val(), 
       Email: $("#Email").val() 
      }; 

       $.ajax({ 
        url: "/Profile/Create", 
        type: "Post", 
        data: JSON.stringyfy(profile), 
        dataType: "json", 
        contentType: "Application/json; charset=utf-8", 
        success: function() { 
         $("#message").html("Profile Saved."); 
        }, 
        error: function() { 
         $("#message").html("Error occured"); 
        } 
       }); 

      return false; 
     }); 
    }); 

</script> 

//Server side 
public ActionResult Create(string confirmButton, CreateViewModel userVm) 
{ 
    if (confirmButton != "Create Profile") return RedirectToAction("Index"); 

    if (!ModelState.IsValid) 
     return View("Create", userVm); 

    User user = new User(); 
    Mapper.Map(userVm, user); 

    _repository.Create(user); 

    return RedirectToAction("Details", new { id = user.UserId }); 
} 

답변

0

는 성공 및 오류는 실제 HTTP 요청 자체의 반환 값을 나타내는입니다. 예를 들어 404를 클릭하면 오류 메시지가 표시됩니다.

페이지 논리를 통해 프로필이 성공적으로 만들어 졌는지 여부에 관계없이 요청 자체가 처리 된 경우 성공 메시지가 나타납니다. 그 시점에서 직접 반환 값을 해석해야합니다.

+0

나는 알고 있습니다. 그러나 위의 컨트롤러 코드에서와 같이 유효성 검사가 실패하면 반환해야합니다. 보기를 반환하는 대신 ("Create", userVm); 나는 무엇을 돌려줘야 하느냐? 내가 직면하고있는 문제가 그 것이다. – Pirzada

0

보기로 리디렉션하는 대신 JsorResult를 리턴 한 다음 클라이언트 측에서 JsonResult를 구문 분석하고 이에 따라 조치를 취하십시오. 당신이이 참조 할 수있는 onsuccess는 콜백에서

[HttpPost] 
public JsonResult DeleteDoc(int Id, int DocCode, SomeObject Model) 
{  
try 
{ 
    // Check annotations stuffs 
    if (!Model.IsValid) { 
    var jsonDataM = new { ExitCode= -100, message = "Invalid Model" }; 
    return Json(jsonDataM, JsonRequestBehavior.DenyGet); 
    } 
    // My logic in here 
    var jsonData = new { ExitCode= 0, message = "Everything's ok" }; 
    return Json(jsonData, JsonRequestBehavior.DenyGet); 
} 
catch (Exception e) 
{ 
    var jsonData2 = new { ExitCode= -1, message = "Everything's Ko" + e.Message }; 
    return Json(jsonDat2a, JsonRequestBehavior.DenyGet); 
} 
} 

:

<script type="text/javascript"> 
function MyAjaxCallBack(context) { 
    var code = context.ExitCode; 
    if (code != 0) { 
    alert (context.message); 
    } 
} 
</script> 

이 코드가 단순화되어 있습니다. 모델에서 IsValid를 관리 할 때 일반적으로 메시지를 작성하기 위해 ModelState를 반복합니다.

관련 문제