zoukankan      html  css  js  c++  java
  • 使用jQuery异步传递Model到控制器方法,并异步返回错误信息

    需要通过jquery传递到控制器方法的Model为:

        public class Person
        {
            public string Name { get; set; }
            public int Age { get; set; } 
        }

     

    使用下面这个类的Message属性装载成功或错误信息,并最终转换成json格式返回给视图: 

        public class PersonVm
        {
            public string Message { get; set; } 
        }

     

    控制器通过遍历ModelState.Keys来显示错误信息。

          public ActionResult Demo()
            {
                return View();
            }
     
            [HttpPost]
            public ActionResult SavePerson(Person person)
            {
                if (ModelState.IsValid)
                {
                    string message = string.Format("用户姓名:{0},年龄:{1}", person.Name, person.Age);
                    return Json(new PersonVm() {Message = message});
                }
                else
                {
                    string errorMessage = "<div class="validation-summary-errors">发生以下错误:<ul>";
                    foreach (var key in ModelState.Keys)
                    {
                        var error = ModelState[key].Errors.FirstOrDefault();
                        if (error != null)
                        {
                            errorMessage += "<li class="field-validation-error">"+error.ErrorMessage+"</li>";
                        }
                    }
                    errorMessage += "</ul>";
                    return Json(new PersonVm() {Message = errorMessage});
                }
            }    
     

     

    视图使用 $.toJSON()方法,把Model转换成json格式传递给控制器方法。把对象转换成json格式的jQuery扩展,在这里

    @model MvcApplication1.Models.Person
    @{
        ViewBag.Title = "Demo";
        Layout = "~/Views/Shared/_Layout.cshtml";
    }
     
    @Html.EditorForModel()
     
    <input type="submit" value="保存" id="personCreate"/>
    <div>
        <span id="resultMessage"></span>
    </div>
     
    @section scripts
    {
        <script src="~/Scripts/json.js"></script>
        <script type="text/javascript">
            $(function() {
                $('#personCreate').click(function() {
                    var person = getPerson();
     
                    if (person == null) {
                        alert("用户名不能为空");
                        return;
                    }
     
                    var json = $.toJSON(person);
     
                    $.ajax({
                        url: '@Url.Action("SavePerson","Home")',
                        type: 'POST',
                        dataType: 'json',
                        data: json,
                        contentType: 'application/json; charset=utf-8',
                        success: function(data) {
                            var message = data.Message;
                            $("#resultMessage").html(message);
                        }
                    });
                });
            });
     
            function getPerson() {
                var name = $('#Name').val();
                var age = $('#Age').val();
                return (name == "") ? null : { Name: name, Age: age };
            }
        </script>
    }
     
  • 相关阅读:
    [VB]用API打开浏览文件夹对话框,选择文件夹
    C# 16进制与字符串、字节数组之间的转换
    DIV未知高度的垂直居中代码
    Webbrowser控件判断网页加载完毕的简单方法
    一些控制鼠标的例子!
    Kernel device tree: simplebus
    Display Serial Interface (From WIKI)
    消费提示:常见 处理器/显卡 性能排名网站 汇总
    HDMI notes From HDMI wiki
    Linux graphics stack 理解
  • 原文地址:https://www.cnblogs.com/darrenji/p/3726731.html
Copyright © 2011-2022 走看看