• Asp.Net MVC 自定义一个ActionResult用于AJAX交互


    1、在使用JQ做AJAX交互时我们通常需要做如下判断:

      1、http请求本身是否成功;

      2、我们的方法执行是否成功;

      3、如果失败了,是什么原因;

      一般写法是这样:

    var url = "http://locahost/xxxx“
    $.ajax({
                    type: "POST",
                    url: url,
                    data: null,
                    dataType: "json",
                    success: function (res) {
                        if (res.success == true) {
                              //// after success 
                        }
                        else {
                             /// unsuccess 
                   alert(res.msg); } }, error: function () { /// http error alert(
    "发生错误,请刷新重试!"); } });

    2、所以我们在程序中有很多地方需要返回类似这样的JSON数据:

      { "success": true, "code": 200 }

      { "success": false, "code": 500 , "msg":"用户名密码错误!" }

    3、我们定义一个ActionResult来方便每一次返回一样格式的数据,提高编码效率同时也提高一致性,减少疏忽导致的错误;

      JObjectActionResult:

    using System;
        using System.Text;
        using System.Web;
        using Newtonsoft.Json.Linq;
        using System.Web.Mvc;
    
        public class JObjectActionResult : ActionResult
        {
            public JObject JObject
            {
                get;
                set;
            }
    
            public Encoding ContentEncoding
            {
                get;
                set;
            }
    
            public override void ExecuteResult(ControllerContext context)
            {
                if (context == null)
                {
                    throw new ArgumentNullException("context");
                }
                HttpResponseBase response = context.HttpContext.Response;
                response.ContentType = "application/json";
                if (ContentEncoding != null)
                {
                    response.ContentEncoding = ContentEncoding;
                }
                if (JObject != null)
                {
                    response.Write(JObject.ToString());
                }
            }
        }
    

      再使用附加方法附加到Controller上;

      JObjectActionResultExtensions

     public static class JObjectActionResultExtensions
     {
            public static JObjectActionResult JObjectResult(this Controller controller, JObject obj)
            {
                return new JObjectActionResult { JObject = obj };
            }
    
            public static JObjectActionResult JObjectResult(this Controller controller, bool success)
            {
                JObject obj = new JObject();
                obj.Add("success", success);
                if (success)
                {
                    obj.Add("code", 200);
                    obj.Add("msg", "Success!");
                }
                else
                {
                    obj.Add("code", 500);
                    obj.Add("msg", "Error!");
                }
                return JObjectResult(controller, obj);
            }
    
            public static JObjectActionResult JObjectResult(this Controller controller, bool success, int code, string msg)
            {
                JObject obj = new JObject();
                obj.Add("success", success);
                obj.Add("code", code);
                obj.Add("msg", msg);
                return JObjectResult(controller, obj);
            }
        }

    4、使用举例:

         那么我们在Controller中使用的时候只需要一句代码就可以了:

    [HttpPost]
    public ActionResult Delete(int id)
    {
                if (id <= 0)
                {
                    return this.JObjectResult(false, 500, "Error ID");
                }
    
                var command = new CustomerDeleteCommand(new int[] { id });
                var result = CommandBus.Submit(command);
                if (!result.Success)
                {
                    return this.JObjectResult(false, 510, result.Message);
                }
                return this.JObjectResult(true);
    }
    作者:Peter Zhan
    博客园blog地址:http://www.cnblogs.com/zhanxp/
    本文版权归作者和博客园所有,欢迎转载,转载请注明出处
  • 相关阅读:
    iOS.UIKit.13.UITableView -- Simple
    iOS.UIKit.12.UICollectionView
    iOS.UIKit.11.UIPickerView
    iOS.UIKit.10.UIDatePicker
    iOS.UIKit.09.UINavigationBar
    iOS.UIKit.08.UIToolbar
    iOS.UIKit.07.UIAlertView_UIActionSheet
    iOS.UIKit.06.UIProgressView_UIActivityIndicatorView
    iOS.UIKit.05.UIScrollView
    iOS.UIKit.04.UISwitch_UISegmentedControl
  • 原文地址:https://www.cnblogs.com/zhanxp/p/2862692.html
Copyright © 2020-2023  润新知