.NET MVC3 几种返回 JSON 对象的方式和注意事项

本文介绍了.NETMVC3中几种返回JSON数据的方法及其注意事项,包括使用JsonResult对象、ActionResult对象及string对象等不同方式,并强调了Content-Type设置的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

.NET MVC3 几种返回 JSON 对象的方式和注意事项

引言
在用 .NET MVC3 给我们做 WEB 项目带来很大灵活性同时,
对刚上手的同学来说有些细微的设置导致的问题让我们
相当的“纠结”!

这里要讨论的就是:使用JQuery的 Ajax 请求后“返回”的
JSON 数据问题。

相信大多数同学都会遇到过,就是在后台已经拼接好了一
(拼接方法比较多,我的博客也有提到过!)
串标准的JSON字符串,但是 Ajax 的 success 方法就是
无法正常解析 JSON 对象(相当郁闷啊!如果不是前端
高手非得调疯了!)。

下面将解几种返回 JSON 的方法和注意事项!

注:我们默认前端使用的是 JQuery的 Ajax 请求.格式如下
当然我要返回的JSON 是下面形式的

1.前台脚本
/*
{
Data:true,
Msg:"成功",
Result:true
}
*/
//JQuery的 Ajax 请求
$.ajax({
type: "Post",
url: "AddUser.aspx",
data: "",
dataType: "json", //如果要返回 json 这里很重要哦!!详细说明参见JQuery的API手册吧
success: function (result) {
alert(result.Result);
if (result.Result) {
alert('成功');
}
else {
alert("失败");
}
},
complete: function (XMLHttpRequest, textStatus) {
//alert("complete");
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("error");
// alert(XMLHttpRequest);
// alert(errorThrown);
// alert(textStatus);
}
});
}

2.后台代码

定义1:
返回的都是 ResultInfo 对象,对象声明如下

/// <summary>
/// 调用结果信息类
/// </summary>
/// <typeparam name="T">泛型类型</typeparam>
public class ResultInfo<T> where T:new ()
{
/// <summary>
/// 调用结果是否成功
/// </summary>
public bool Result { set; get; }
/// <summary>
/// 调用结果返回的数据
/// </summary>
public T Data { set; get; }
/// <summary>
/// 调用结果返回的相关提示信息
/// </summary>
public string Msg { set; get; }
}

定义2:
ToJsonStr() 方法,是我自己封装的一个将对象转换为 Json
字符串的一个扩展方法。

2.1 请求的返回值为 JsonResult 对象

public JsonResult AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
JsonResult js = new JsonResult();
js.Data = result;
return js;
}

说明:
JsonResult 对象比较方便了用着,你只需要将对象赋值
给它的实例化对象的 Data 属性,之后直接返回它就OK了,其他
的如何将对象转为 Json 字符串你都不用考录了!
但要注意的是:如果你画蛇添足,把对象转为 Json 字符串,然后
再赋值给 Data 属性,客户端是得不到 Json 对象的!

2.2 请求的返回值为 ActionResult 对象

public ActionResult AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
string json = result.ToJsonStr();

return Content(json);

//return Content(json,"text/json"); //这种写法也可以,第二个参数就是:MIME类型

}

说明:
当然你也可以使用 2.1 中的方式,返回 JsonResult 对象,咱们现在
要用另外一种方式返回JSON。
用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求
的 dataType 属性值必须设为 "json",即:dataType: "json"。
没有这个支持你得到的将会是一个字符串!

2.3 请求的返回值为 string 对象

public string AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
string json = result.ToJsonStr();
return json;
}

说明:
用这种方式脚本那边儿需要提供支持!就是要保证 JQuery的 Ajax 请求
的 dataType 属性值必须设为 "json",即:dataType: "json"。
没有这个支持你得到的将会是一个字符串!

2.4 设置 Response.ContentType 属性

public string AddUser()
{
bool flag = true;
ResultInfo<bool> result = new ResultInfo<bool>()
{
Result = flag,
Msg = flag ? "成功" : "失败",
Data = flag
};
Response.ContentType = "application/json; charset=utf-8";
string json = result.ToJsonStr();
return json;
}

说明:
如果在后台代码设置了,响应对象(response)的
Content-Type 等于 application/json; charset=utf-8 时,
JQuery的 Ajax 请求可以不用有 dataType 属性。

结论:
其实讨论了这么多就是解决 2.4 中要解决的问题,客户端如何
解析你返回的字符,就是通过 Content-Type 属性决定。
这么多种方法为的是给让大家用着方便,少走弯路!(我是走了弯路
了,很不爽!)
我喜欢用 2.4 的方法,个人喜好而已!

### 在 ASP.NET MVC 中实现提示音功能或播放声音 在 ASP.NET MVC 项目中实现提示音功能或播放声音,可以通过以下几种方式完成: #### 1. 使用 HTML5 `<audio>` 标签 HTML5 提供了 `<audio>` 标签,可以方便地嵌入音频文件并控制其播放。可以在视图中直接使用 `<audio>` 标签,并通过 JavaScript 控制播放逻辑。 ```html <audio id="audioPlayer" src="/Content/Sounds/AlertSound.mp3" preload="auto"></audio> <button onclick="playSound()">播放提示音</button> <script> function playSound() { var audio = document.getElementById("audioPlayer"); audio.play(); } </script> ``` 上述代码中,`<audio>` 标签定义了一个音频文件的路径,`preload="auto"` 表示音频会在页面加载时预先加载[^1]。当用户点击按钮时,JavaScript 函数 `playSound()` 调用音频的 `play()` 方法来播放声音。 #### 2. 使用 SignalR 实现实时提示音 如果需要在服务器端触发提示音,可以结合 SignalR 技术实现。SignalR 是一个用于实现实时通信的库,可以将播放提示音的指令从服务器发送到客户端。 - **服务器端**:在控制器中调用 SignalR 的方法,通知客户端播放声音。 ```csharp public class NotificationHub : Hub { public void SendNotification() { Clients.All.playSound(); // 向所有连接的客户端发送播放声音的指令 } } ``` - **客户端**:在视图中初始化 SignalR 并监听播放声音的事件。 ```javascript var notificationHub = $.connection.notificationHub; notificationHub.client.playSound = function () { var audio = new Audio(&#39;/Content/Sounds/AlertSound.mp3&#39;); audio.play(); }; $.connection.hub.start(); ``` 通过 SignalR,服务器可以在特定条件下(如新消息到达、任务完成等)触发客户端播放提示音[^1]。 #### 3. 使用 Web API 或 AJAX 请求动态加载音频 如果音频文件是动态生成的,或者需要根据条件选择不同的音频文件,可以使用 Web API 或 AJAX 请求从服务器获取音频文件路径。 - **服务器端**:创建一个返回音频文件路径的 API 控制器。 ```csharp public class AudioController : Controller { public JsonResult GetAudioPath(string type) { string audioPath = "/Content/Sounds/"; if (type == "alert") audioPath += "AlertSound.mp3"; else if (type == "success") audioPath += "SuccessSound.mp3"; return Json(new { path = audioPath }, JsonRequestBehavior.AllowGet); } } ``` - **客户端**:通过 AJAX 请求获取音频路径并播放。 ```javascript function playDynamicSound(type) { $.getJSON("/Audio/GetAudioPath", { type: type }, function (data) { var audio = new Audio(data.path); audio.play(); }); } ``` 这种方式适合于需要根据业务逻辑动态选择音频文件的场景[^4]。 #### 4. 文件上传与提示音 如果需要上传音频文件并在上传完成后播放提示音,可以参考文件上传的相关技术[^5]。确保在上传完成后调用播放声音的逻辑。 ```javascript $(&#39;#uploadForm&#39;).on(&#39;submit&#39;, function (e) { e.preventDefault(); var formData = new FormData(this); $.ajax({ url: &#39;/Home/UploadAudio&#39;, type: &#39;POST&#39;, data: formData, processData: false, contentType: false, success: function () { var audio = new Audio(&#39;/Content/Sounds/UploadedSound.mp3&#39;); audio.play(); } }); }); ``` ### 注意事项 - 确保音频文件路径正确,并且浏览器支持所使用的音频格式(如 MP3、WAV 等)[^3]。 - 如果需要跨浏览器兼容性,建议测试不同浏览器的行为。 - 对于较大的音频文件,可以考虑设置 Web.Config 中的最大请求长度限制[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值