MVC ActionResult JsonResult
以下是ActionResult的继承图:
大概的分类:
- EmptyResult:表示不执行任何操作的结果
- ContentResult :返回文本结果
- JavaScriptResult:返回结果为JavaScript
- JsonResult :返回Json结构数据
- RedirectResult,RedirectToRouteResult
- FileContentResult,FilePathResult,FileStreamResult
- ViewResult,PartialViewResult
- 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>