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

标签 asp.net-mvc-3

我一直在使用新的 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/

相关文章:

asp.net-mvc-3 - 使用存储库模型的 MVC3 和 Ninject 每个请求的 RavenDB session

mysql - 导入 csv 和 xls 以批量上传用户以在网站中注册

asp.net-mvc-3 - 使用 Jquery Ajax 和可变数据渲染部分 View

asp.net - Razor Helpers 与代码块共享 html 问题

c# - 始终使用 MVC3 和 Razor 输出原始 HTML

asp.net-mvc-3 - nop commerce automapper 异常,缺少类型映射配置或不受支持的映射

javascript - 如何获取用户并将其附加到评论中,然后使用 JavaScript 发送结果以查看?

asp.net-mvc - View 中的条件语句是否是坏消息?

c# - 下拉列表选择索引更改 Razor

c# - 如何将这些 LINQ 结果加载到我的 ViewModel 类中?