编辑:我早已超越VS2008,并且使用MVC 3+返回JSON结果时没有任何问题。我想把这个问题标记为过时,或者说是这个问题。也许有人仍会在这个和答案中找到价值,但我不能将它们标记为“正确”,因为我无法对它们进行测试。
我是MVC的新手,我正在努力使一个简单的网站工作。我开始怀疑它是否真的值得...我可以让这个网站启动并运行“旧学校”ASP.Net已经两三次了......但这不是重点;-)
如果没有浏览器提示我将响应保存为文件,如何让我的控制器返回JSONResult?以下是调用操作的JavaScript:
$("select#PageId").change(function() {
var id = $("#PageId > option:selected").attr("value");
$.getJSON('FindCategories/', { PageId: id },
function(data) {
if (data.length > 0) {
var options = '';
for (c in data) {
var cat = data[c];
options += "<option value='" + cat.CategoryId + "'>" + cat.CategoryName + "</option>";
}
$("#CategoryId").removeAttr('disabled').html(options);
} else {
$("#CategoryId").attr('disabled', true).html('');
}
});
});
这是我的控制器动作:
Function GetCategoriesByPage(ByVal PageId As Integer) As JsonResult
Dim categories As List(Of Models.WebCategoryLite) = _service.ListCategoriesByPageId(PageId)
Dim res As New JsonResult
res.Data = categories
Return res
End Function
Fiddler告诉我JSON正在返回浏览器:
HTTP/1.1 200 OK
Server: ASP.NET Development Server/9.0.0.0
Date: Mon, 24 Aug 2009 19:43:53 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: private
Content-Type: application/json; charset=utf-8
Content-Length: 246
Connection: Close
[{"CategoryID":1,"CategoryName":"Sample Category"},{"CategoryID":2,"CategoryName":"Another Sample"},{"CategoryID":3,"CategoryName":"Yet Another Sample"}]
无论我尝试使用哪种浏览器,我都会收到“保存文件”提示。
我在Visual Studio 2008 IDE中运行它。我需要做什么才能在IDE和IIS中完成这项工作?
提前致谢!
答案 0 :(得分:3)
只需将Content-type设置为“text / plain”:
Function GetCategoriesByPage(ByVal PageId As Integer) As JsonResult
Dim categories As List(Of Models.WebCategoryLite) = _service.ListCategoriesByPageId(PageId)
Dim res As New JsonResult
res.Data = categories
res.ContentType = "text/plain"
Return res
End Function
如果它不起作用,您可以继承 JsonResult 并覆盖 ExecuteResult 方法:
public class myOwnJsonResul: JsonResult
{
public override void ExecuteResult(ControllerContext context)
{
base.ExecuteResult(context);
context.HttpContext.Response.ContentType = "text/plain";
}
}
答案 1 :(得分:1)
干得好。
var s = new JsonResult();
s.ContentType = "text/plain";
s.JsonRequestBehavior = JsonRequestBehavior.AllowGet;
s.Data = AreaServiceClient.GetCityList(id);
return s;