旧的ASP.NET WebForms项目正在迁移到ASP.NET MVC。 ASP.NET MVC Web应用程序包含许多ASPX页面。 WebMethods保存在ASPX页面的代码隐藏文件中。对WebMethod进行AJAX调用以使用jQuery获取响应。
对于初始迁移,我们希望保留旧的ASP.NET WebForms,并希望在MVC(Razor页面)中添加新页面。渐渐地,旧的WebForms将转换为MVC。
以下是使用的WebMethod示例:
[WebMethod]
[ScriptMethod(UseHttpGet = true)]
public static string GetMenu()
{
return Utility.CreateMenu();
}
jQuery AJAX调用完成如下:
$.ajax({
url: 'default.aspx/GetMenu',
type: 'GET',
data: '{}',
contentType: "application/json; charset=utf-8",
dataType: "json",
beforeSend: function () {
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
},
success: function (data, textStatus) {
},
complete: function (XMLHttpRequest, textStatus) {
}
});
我们对WebMethod响应有一种奇怪的行为。响应有时作为JSON对象返回,有时候是一个用" d"宾语。
用" d"包裹的字符串例如:
{"d":"[{\"SubItems\":null,\"MenuState\":\"2\",\"Description\":\"Create issue\",\"Url\":\"default.aspx?id=1234\"}]"}
JSON响应示例:
{SubItems: null, MenuState: "2", Description: "Create issue", Url: "default.aspx?id=1234"}
以前,当没有添加ASP.NET MVC时,它会将响应作为字符串包含在" d"宾语。
备注
routes.IgnoreRoute("{aspxpage}.aspx/{*webmethod}");
new
JavaScriptSerializer().Serialize(model);
var obj = JSON.parse(response.d);
有没有办法强制WebMethod返回用" d"包裹的字符串?宾语?或者其他任何方式如何处理这个问题?