我一直在使用新的 MVC3 Json 模型绑定(bind),它非常好。
目前,我可以将 JSON 发布到 Controller 并绑定(bind)它。模型验证也很好。
但是如果模型无效怎么办?
我想返回 JSON 并让客户端通知用户(就像你如何在 mvc 中执行正常的客户端验证一样)
有谁知道有关如何执行此操作的一些教程?
这甚至可能吗?
或者有没有我可以利用的框架来做到这一点?
最佳答案
在 MVC3 中使用不显眼的 JavaScript 时,以下示例适用于我。我正在做一些非常相似的事情。鉴于以下 JsonResponse
类(class):
public enum Status
{
Ok,
Error
}
public class JsonResponse
{
public Status Status { get; set; }
public string Message { get; set; }
public List<string> Errors { get; set; }
}
我的 Controller 可以有一个方法:
[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>
我正在使用
jQuery.tmpl
显示错误。我已经从这个例子中排除了这一点。
关于asp.net-mvc-3 - ASP.Net MVC 3 JSON 模型绑定(bind)和服务器端模型验证与客户端验证混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4690967/