我一直在玩新的MVC3 Json模型绑定,这是非常好的。
目前,我可以发布JSON到控制器并绑定。模型验证也很好地发生。
但是,如果模型无效,会发生什么?
我想返回JSON并让客户端通知用户(像在mvc中执行正常的客户端验证)
有没有人知道有关如何执行这些的教程?
这是甚么可能吗?
还是有框架我可以用来做到这一点?
解决方法
在MVC3中使用不引人注意的JavaScript时,以下示例适用于我。我在做非常相似的事情给出以下JsonResponse类:
public enum Status { Ok,Error } public class JsonResponse { public Status Status { get; set; } public string Message { get; set; } public List<string> Errors { get; set; } }
我的控制器可以有一个方法:
[HttpPost] public ActionResult Login(UserLoginModel model) { JsonResponse res = new JsonResponse(); if (!ModelState.IsValid) { res.Status = Status.Error; res.Errors = GetModelStateErrorsAsString(this.ModelState); res.Message = "Oh dear,what have you done. Check the list of errors dude!"; } else { // Save it here... // Return success res.Status = Status.Ok; res.Message = "Everything was hunky dory"; } return Json(res); }
并且可以枚举ModelStateDictionary的错误,如下所示:
private List<string> GetModelStateErrorsAsString(ModelStateDictionary state) { List<string> errors = new List<string>(); foreach (var key in ModelState.Keys) { var error = ModelState[key].Errors.FirstOrDefault(); if (error != null) { errors.Add(error.ErrorMessage); } } return errors; }
那么在我看来我可以有以下JSON POST:
<script type="text/javascript"> $("form").submit(function (evt) { // validate $('form').valid(); // extract values to submit var form = $(this),username = form.find("[name=Username]").val(),password = form.find("[name=Password]").val(),json = JSON.stringify({ Username: username,Password: password }); $.ajax({ url: form.attr("action"),type: 'POST',contentType: 'application/json; charset=utf-8',dataType: 'json',data: json,success: function (result) { alert(result.Message); } }); // stop form submitting evt.preventDefault(); }); </script>