asp.net-mvc-3 – ASP.Net MVC 3 JSON模型绑定和服务器端模型验证与客户端验证混合

我一直在玩新的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>

我使用jQuery.tmpl来显示错误。我从这个例子中排除了这一点。

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....