本文导读:当客户端调用某个Action方法并希望以JSON的格式返回请求的数据时,ASP.NET MVC需要有一种机制将CLR对象转换成JSON格式予以响应,而这可以通过JsonResult来解决。下面介绍MVC中JsonResult的用法

一、MVC中JsonResult定义的代码片段

     public class JsonResult : ActionResult
     {
public override void ExecuteResult(ControllerContext context); public object Data { get; set; }
public Encoding ContentEncoding { get; set; }
public string ContentType { get; set; }
public JsonRequestBehavior JsonRequestBehavior { get; set; }
public int? MaxJsonLength { get; set; }
public int? RecursionLimit { get; set; }
}

public enum JsonRequestBehavior
{
AllowGet,
DenyGet
}

其中:JsonResult具有一个object类型的属性Data表示需要被转换成JSON格式的数据对象。属性ContentEncoding和ContentType表示为当前响应设置的编码方式和媒体类型,默认采用的媒体类型为“application/json”。

备注:

出于对安全的考虑,JsonResult在默认的情况下不能作为对HTTP-GET请求的响应,在这种情况下并会直接抛出一个InvalidOperationException异常。我们可以通过它的JsonRequestBehavior属性开启JsonResult对HTTP-GET请求的支持。该属性类型为JsonRequestBehavior枚举,两个枚举项AllowGet和DenyGet分别表示允许/拒绝支持对HTTP-GET请求的响应。JsonResult的JsonRequestBehavior属性在初始化的时候被设置为DenyGet,如果我们需要用创建的JsonResult来响应HTTP-GET请求,需要显式地将它的JsonRequestBehavior属性设置为AllowGet。

二、Controller中返回JsonResult的方法

在抽象类Controller同样定义如下一系列的Json方法用于根据指定的数据对象、编码方式以及JsonRequestBehavior来创相应的JsonResult。

public abstract class Controller : ControllerBase,...
     {
//其他成员
protected internal JsonResult Json(object data);
protected internal JsonResult Json(object data, string contentType);
protected internal JsonResult Json(object data, JsonRequestBehavior behavior);
protected internal virtual JsonResult Json(object data, string contentType, Encoding contentEncoding);
protected internal JsonResult Json(object data, string contentType, JsonRequestBehavior behavior);
protected internal virtual JsonResult Json(object data, string contentType, Encoding contentEncoding, JsonRequestBehavior behavior);
}

三、MVC JsonResult的实例

1、视图页面

<!DOCTYPE html>

<html>

<head runat="server">

    <title>Index2</title>

    <script src="/Scripts/jquery-1.4.4。js" type="text/javascript"></script>

<script type="text/javascript">
var login = function () {
var data = { "username": $.trim($("#username").val()), "pwd": $.trim($("#pwd").val()) }

// $.post("/Home/Login", data, function (message) {
// if (message.success) {
// alert(message.msg);
// }
// else {
// alert(message.msg);
// }
// }, "json");

$.ajax({ type: "post", url: "/Home/Login", data: data, success: function (message) {
if (message.Success) {
alert(message.Msg);
}
else {
alert(message.Msg);
}
}, dataType: "json"
});
}
</script>
</head>
<body>
<div id="nav">
<a href="/Home/Index">ajax+Handler</a>&nbsp; <a>ajax+action</a>
</div>
<div>
<h3>
Login</h3>
Username:<input id="username" name="username" type="text" /><br />
Userpass:<input id="pwd" name="pwd" type="password" /><br />
<button type="button" onclick="login()">
Submit</button>
</div>
</body>
</html> 2、控制器
using System.Web.Mvc;

namespace Mvc1.Controllers

{
public class HomeController : Controller
{
//
// GET: /Home/

public ActionResult Index()
{
return View();
}
//
// GET: /Home/Index2
public ActionResult Index2()
{
return View();
}

// Post: /Home/Login
[HttpPost]
public JsonResult Login()
{
string username=Request["username"];
string pwd = Request["pwd"];

message msg = null;

if (username == "rain" && pwd == "m123")
{
msg = new message(true, "Success");
}
else
{
msg = new message(false, "Fail");
}

return Json(msg);
}
}

class message
{
bool success;
string msg;

public message(bool success, string msg)
{
this.success = success;
this.msg = msg;
}

public bool Success
{
get { return success; }
set { success = value; }
}
public string Msg
{
get { return msg; }
set { msg = value; }
}
}
} 转自:http://www.studyofnet.com/news/594.html
 

最新文章

  1. [Android] 时间Time Date 以及Location中gettime
  2. hdu 5073
  3. .NET Framework基础知识总结
  4. 【转】统计模型-n元文法
  5. Intervals---poj1201(差分约束系统)
  6. oracle数据字典-权限-角色
  7. 菜鸟的js学习笔记
  8. 读取Excel文件的两种方法
  9. Atomikos 中文说明文档【转】
  10. C++调用matlab实例
  11. sharepoint 2013 suitbar
  12. JavaScript向表格中添加按钮和文本输入框
  13. android的Home键的监听封装工具类(一)
  14. Object.wait()与Object.notify()的用法
  15. 蓝桥网试题 java 基础练习 十进制转十六进制
  16. 使用TransactionScope(轻量级事务)实现数据库操作事务
  17. Mycat 配置说明(server.xml)
  18. itunes 备份导致C盘空间不足问题解决办法
  19. 【MatConvNet代码解析】 vl_nnsoftmaxloss
  20. thinkphp5中使用PHPExcel(转载)

热门文章

  1. NPOI2.0学习(二)
  2. oracle数据泵实现不同用户之间的导出导入
  3. Android 之px于dp在Java代码中的转换
  4. 【BZOJ 1031】【JSOI 2007】字符加密Cipher
  5. DOS命令行下mysql 基本命令
  6. wordpress 缩略图功能函数 the_post_thumbnail
  7. Linux基础2
  8. Leetcode 280. Wiggle Sort
  9. Namenode主节点停止报错 Error: flush failed for required journal
  10. eclipse中项目右上方有一个s,eclipse中项目左下方友谊个红色的叉,eclipse中项目左下方友谊个红色的感叹号