MVC ActionResult 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

 

 

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>
posted @ 2015-03-09 16:38  怪咖Eric  阅读(2966)  评论(1编辑  收藏  举报