以下是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>