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

    正式解释之前,先来看看ActionResult的继承图:

    大概的分类:

    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

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

    View

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

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

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

    1 <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

     1 [HttpPost]
     2 public ActionResult GetDetail()
     3 {
     4     return Json(new
     5     {
     6         UserName = "Test User Name",
     7         Email = "Test@Test.com",
     8         Desc = "Test Desc"
     9     });
    10 }

    View

     1 <script type="text/javascript">
     2     function handleSuccess(context) {
     3         $("#userName").html(context.UserName);
     4         $("#email").html(context.Email);
     5         $("#desc").html(context.Desc);
     6     }
     7 </script>
     8 <table>
     9     <tr>
    10         <td>
    11             UserName
    12         </td>
    13         <td>
    14             <div id="userName" />
    15         </td>
    16     </tr>
    17     <tr>
    18         <td>
    19             Email
    20         </td>
    21         <td>
    22             <div id="email" />
    23         </td>
    24     </tr>
    25     <tr>
    26         <td>
    27             Desc
    28         </td>
    29         <td>
    30             <div id="desc" />
    31         </td>
    32     </tr>
    33 </table>
    34 @Ajax.ActionLink("Click Me", "GetDetail", new AjaxOptions { HttpMethod = "POST", OnSuccess = "handleSuccess" })

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

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

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

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

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

    1 <script type="text/javascript">
    2     function handleSuccess(context) {
    3         var json = context.get_data();
    4         var data = Sys.Serialization.JavaScriptSerializer.deserialize(json);
    5         $("#userName").html(data.UserName);
    6         $("#email").html(data.Email);
    7         $("#desc").html(data.Desc);
    8     }
    9 </script>
  • 相关阅读:
    滴水穿石Pydoop 架构和模块包介绍
    滴水穿石SSH Secure Shell Client安装和使用
    安装memcache到CentOS(另附yum法)
    php文件锁(转)
    MySQL中distinct和group by性能比较
    php中的自动加载
    php注释标准
    新浪API40310错误解决方法
    CentOS 5.5使用yum来安装LAMP(php运行环境)(转)
    MySQL优化之COUNT()效率
  • 原文地址:https://www.cnblogs.com/felix-wang/p/7110098.html
Copyright © 2011-2022 走看看