zoukankan      html  css  js  c++  java
  • MVC ActionResult JavaScriptResult,JsonResult

    以下是ActionResult的继承图:

    image

    大概的分类:

    1. EmptyResult:表示不执行任何操作的结果
    2. ContentResult :返回文本结果
    3. JavaScriptResult:返回结果为JavaScript
    4. JsonResult :返回Json结构数据
    5. RedirectResult,RedirectToRouteResult
    6. FileContentResult,FilePathResult,FileStreamResult
    7. ViewResult,PartialViewResult
    8. HttpNotFoundResult,HttpUnauthorizedResult

    JavaScriptResult

    查了很多的资料都没有发现JavaScriptResult的实际用法,而且还发现了很多不建议使用JavaScriptResult的文章,因为这样脚本和后台不分离。

    很多文章是按一下方式来使用JavaScriptResult的:

    Action

    public ActionResult GetTime()
    {
        var script = string.Format("$('#myPnl').html('{0}');", DateTime.Now);
        return JavaScript(script);
    }

    View

    @Html.ActionLink("Click Me", "GetTime")

    这样的执行结果是页面并不会执行这一段script,而是将这段script作为文件Response出来。

    既然执行GetTime这个Action其实取得script这段脚本的文件,那么就可以这样来使用:

    <script src="@Url.Action("GetTime")" type="text/javascript"></script>
    

    这样的结果就是该script段可以调用GetTime Action返回的代码段。

    遗留的问题:

    在MVC3中,如果引用了jquery.unobtrusive-ajax,那么使用@Html.ActionLink的时候页面会报JavaScript脚本错误,原因未知。

    JsonResult

    大家都知道AJax是使用Json来传输数据的,Json数据在JavaScript中被广泛使用,所以JsonResult的使用范围是非常管的,下面代码演示了在MVC的Ajax.ActionLink中如何使用JsonResult

    Action

    [HttpPost]
    public ActionResult GetDetail()
    {
        return Json(new
        {
            UserName = "Test User Name",
            Email = "Test@Test.com",
            Desc = "Test Desc"
        });
    }

    View

    <script type="text/javascript">
        function handleSuccess(context) {
            $("#userName").html(context.UserName);
            $("#email").html(context.Email);
            $("#desc").html(context.Desc);
        }
    </script>
    <table>
        <tr>
            <td>
                UserName
            </td>
            <td>
                <div id="userName" />
            </td>
        </tr>
        <tr>
            <td>
                Email
            </td>
            <td>
                <div id="email" />
            </td>
        </tr>
        <tr>
            <td>
                Desc
            </td>
            <td>
                <div id="desc" />
            </td>
        </tr>
    </table>
    @Ajax.ActionLink("Click Me", "GetDetail", new AjaxOptions { HttpMethod = "POST", OnSuccess = "handleSuccess" })

    在点击ActionLink后,会调用GetDetailAction返回JsonResult,在OnSuccess方法中可以对返回的结果进行处理。

    当然要使用以上功能需要引用以下文件:

    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
    

    以上使用方法是在MVC3上测试通过的,但是在参考MVC2的代码时,发现用法上有以下差异:

    在MVC2中是不支持jquery.unobtrusive-ajax.min.js的,返回的context也需要做以下处理,

    <script type="text/javascript">
        function handleSuccess(context) {
            var json = context.get_data();
            var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
            $("#userName").html(data.UserName);
            $("#email").html(data.Email);
            $("#desc").html(data.Desc);
        }
    </script>
    
    Celery 标签: MVC
  • 相关阅读:
    Windows下 如何添加开机启动项
    Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据
    Android 从ImageView中获取Bitmap对象方法
    剑指offer(纪念版)读书笔记【实时更新】
    剑指offer(纪念版) 面试题3:二维数组中的查找
    C++ sizeof 误区 大公司面试题
    51 nod 1521 一维战舰 时间复杂度O(n),同 Codeforces 567D. One-Dimensional Battle Ships 有详细注释
    51nod 1126 求递推序列的第N项 思路:递推模拟,求循环节。详细注释
    51nod 1451 合法三角形 判斜率去重,时间复杂度O(n^2)
    关于JetBrains CLion 激活 (CLion License Activation)的解决办法,带hosts详细修改
  • 原文地址:https://www.cnblogs.com/celery94/p/1933541.html
Copyright © 2011-2022 走看看