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

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>


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值