ContentResult类型和数据类型与在MVC3
Ajax调用最近,我搜索了一个良好的发动机与Asp.Net的mvc 3.生成图表我终于找到FusionChart它有一个非常好的品种的图表类型。ContentResult类型和数据类型与在MVC3
帮我创建显示图表所需的XML,我发现这个项目Libero。该项目在xml和对象模型之间创建一个抽象级别来定义图形的属性。
该项目使用Mvc2,我试图将其转换为Mvc3。除了一个样本外,所有样本都完美运行带有Ajax调用的示例。
在该样品中,控制器返回一个返回XML来动态地更新所述图形一个ContentResult类型。该项目在Mvc2中完美运行,但不在Mvc3中运行。
这里是在控制器代码:
public ActionResult GetSalesXmlData(string period, string chartType, string chartTemplate)
{
var salesXmlData = this.Content(GetSalesChart(period, chartType, chartTemplate).ToXML(), "text/xml");
return salesXmlData;
}
这里是在视图代码:
$.ajax({
url: "/Home/GetSalesXmlData",
type: "POST",
data: { chartType: chartType, chartTemplate: chartTemplate, period: period },
dataType: "application/JSON",
success: function (data) {
Chart01.xmlData = data;
Chart01.chartType = chartType;
Chart01.showChart();
},
error: function() {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
当我尝试执行在MVC3这个代码,我收到此错误:
textStatus = parsererror errorThrown =否转换从XML到应用/ JSON
搜索了一段时间后,我发现如何在这个stackoverflow question中纠正我的问题。
阅读这篇文章后,我改变了我的控制器代码这样:
public JsonResult GetSalesXmlData(string period, string chartType, string chartTemplate)
{
var salesXmlData = this.Json(GetSalesChart(period, chartType, chartTemplate).ToXML(), "text/xml");
return salesXmlData;
}
而我的AJAX调用此:
$.ajax({
url: "/Home/GetSalesXmlData",
type: "POST",
data: { chartType: chartType, chartTemplate: chartTemplate, period: period },
dataType: "text json",
success: function (result) {
Chart01.xmlData = result;
Chart01.chartType = chartType;
Chart01.showChart();
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
我的问题是:为什么从MVC2转换我的项目后MVC3,我必须从应用/ JSON改变从ContentResult类型由控制器的结果返回JsonResult在我看来,具体的数据类型值文本JSON?
谢谢你的时间。
在你原来的例子,你指示的jQuery解析响应为JSON即使它是XML。作为MVC升级过程的一部分,如果您从较旧版本的jQuery升级到较新版本,那将解释解析器错误。老版本的jQuery在解析AJAX响应方面相当快速和松散,但当jQuery相信响应是JSON或者明确地告诉它如此对待它们时,更高版本开始使用JSON.parse
。
您的较新版本通过采用XML和JSON序列化XML来解决此问题。虽然技术上确实有效,但它增加了一个低效的冗余序列化层。
请问您最初的方式工作,如果你改变了dataType
到text/xml
?
说到效率,你有没有考虑过使用JSON而不是XML? FusionCharts appears to support that。然后,您可以完全避免使用XML,通过线路使用更紧凑的序列化,并利用浏览器的本机方法来更有效地解压缩响应。
我想深入了解您的知识。我一定会再次阅读和阅读您的建议,并更多地了解我使用的jQuery版本,以及可以与ContentResult一起使用的不同dataType。再次感谢你。我会给你回复我的结果。 – Samuel 2012-04-03 01:14:01