zoukankan      html  css  js  c++  java
  • MVC4.0 实现单一Action返回多种结果

    在开发过程中,我们往往会遇到这种情况。例如:展示学生的详细信息页面,加载学生的详细信息局部视图,异步请求学生的详细信息Json数据等等。

    一般情况下,我们会写三个不同的action来支撑前台数据的调用,Student(view视图)、PartialStudent(Partial视图)和JsonStudent(JsonResult视图)。从实现上,我们写的代码没有任何问题,这些功能都是我们想要的,而且代码也很整洁。

    但是仔细想想,会发现三个Action执行相同的业务逻辑,唯一的区别只是返回个浏览器内容的方式不同,为了减少重复的代码,我们可以做出以下代码调整

     1.仿Request.IsAjaxRequest(),给HttpRequestBase扩展一个IsPartialRequest方法,来判断是否是局部视图请求(需要Url上加一个format=partial的参数来辅助实现)

        public static class HttpRequestBaseExtensions
        {
            public static bool IsPartialRequest(this HttpRequestBase request)
            {
                return string.Equals(request["format"], "partial");
            }
        }
    

     2.仿Request.IsAjaxRequest(),给HttpRequestBase扩展一个IsJsonRequest方法,来判断是否是Json请求(需要Url上加一个format=json的参数来辅助实现)

        public static class HttpRequestBaseExtensions
        {
            public static bool IsJsonRequest(this HttpRequestBase request)
            {
                return string.Equals(request["format"], "json");
            }
        }
    

     3.合并请求的逻辑代码

            public ActionResult Student()
            {
                if (Request.IsJsonRequest())
                    return Json(new { Name = "我是小明" }, JsonRequestBehavior.AllowGet);
    
                if (Request.IsPartialRequest())
                    return PartialView("PartialStudent");
    
                return View(new { Name = "小明", Sex = "女" });
            }
    

     4.调取数据的前台代码如下:

    <body>
        <h3>view视图</h3>
        <div>我是小明</div>
    
        <h3>PartialView视图:</h3>
        <div id="partial"></div>
    
        <h3>Json数据:</h3>
        <div id="json"></div>
    
        <script src="~/Content/js/jquery-1.10.2.min.js"></script>
    
        <script type="text/javascript">
            $(function () {
                $('#partial').load('@Url.Action("Student", "Home", new { area=string.Empty, format="partial" })');
    
                $.post('@Url.Action("Student", "Home")', { format: 'json' }, function (res) {
                    if (res) {
                        $('#json').html(res.Name);
                    }
                }, 'json')
            })
        </script>
    </body>
    

     5.我们可以看一下渲染效果

  • 相关阅读:
    实例教程五:采用SharedPreferences保存用户偏好设置参数
    实例教程四:采用Pull解析器解析和生成XML内容
    实例教程六:创建数据库与完成数据添删改查第一种写法
    实例教程二:短信发送器
    实例教程九:采用ContentProvider对外共享数据
    带手势滑动的日历Demo
    实例教程三:文件的保存与读取
    短信快速回复(源码)
    实例教程八:采用ListView实现数据列表显示
    javascript中的变量申明
  • 原文地址:https://www.cnblogs.com/amywechat/p/4905317.html
Copyright © 2011-2022 走看看