mvc3 ajax在控制器端提交。怎么样?

时间:2010-12-09 07:13:36

标签: asp.net-mvc-3

按钮点击后我不明白

如何在服务器端处理ajax调用,以便我的DataAnnotation工作 我收到了成功或错误消息。

<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 });
}

2 个答案:

答案 0 :(得分:0)

如果我没记错的话(自从我玩jquery以来已经有一段时间了),成功和错误表示实际HTTP请求本身的返回值。例如,如果您点击404,则会收到错误消息。

无论是否通过页面逻辑成功创建了配置文件,如果处理了请求本身,则会触发成功消息 - 您需要在此时自行解释返回值。

答案 1 :(得分:0)

尝试返回一个JsorResult而不是重定向到一个视图,然后客户端,解析JsonResult并采取相应的行动。

[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);
} 
}
<\ n>在OnSuccess回调中,您可以参考:

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

请注意,此代码已简化。在模型上管理IsValid时,我通常会迭代del ModelState以构建消息。