2010-12-09 56 views
0

一次按钮点击在控制器端提交mvc3 ajax。怎么样?

如何处理在服务器端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 }); 
} 

回答

0

如果我没记错的话(它已经有一段时间,因为我用jQuery饰),成功和错误指示的实际HTTP请求本身的返回值。例如,如果你点击404,你会收到一条错误消息。

不管是否个人资料是通过你的页面逻辑创建成功后,如果请求本身处理,那么成功的消息将被打 - 你需要自己解释返回值,在这一点上。

+0

我明白了。但是就像在上面的控制器代码中,我一旦验证失败就返回。而不是返回视图(“创建”,userVm);我应该返回什么。那就是我面临的问题。 – Pirzada 2010-12-09 07:52:43

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); 
} 
} 
中的onSuccess回调,你可以参考这个与

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

请注意,此代码简化。在Model上管理IsValid时,我通常迭代del ModelState以建立一条消息。