在使用jQuery Ajax方法时,我发现该方法只能调用webmethod或获取/发布mvc。为什么我不能使用ajax方法调用普通函数?
示例:
$.ajax({
type: "POST",
url: "CS.aspx/GetCurrentTime",
data: '{name: "' + $("#<%=txtUserName.ClientID%>")[0].value + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function(response) {
alert(response.d);
}
});
假设我正在调用CS.aspx页面的GetCurrentTime()方法,那么我需要用属性 WebMethod 来装饰GetCurrentTime(),以便从ajax方法调用。
答案 0 :(得分:1)
你得到的是预期的行为。这个问题与jQuery无关,而是与服务器端代码有关。
您通常通过其URL请求资源以获取该资源。
CS.aspx
是指向该页面的网址。
使用CS.aspx/GetCurrentTime
实际上是一个不同的URL,要求使用不同的资源。
这就是WebMethodAttribute
的用武之地。它告诉ASP.NET通过URL CS.aspx/GetCurrentTime
可以获得新资源,这样ASP.NET运行时知道在请求时要做什么为该网址制作。
作为旁注:ASP.NET MVC在其URL中不使用.aspx(至少在默认情况下不是这样)。更好地检查您的设置并直截了当。
编辑:如果您使用的是MVC,那么您将处于控制器(而不是页面)中并且您正在编写操作(而不是方法)。在这种情况下,不需要WebMethodAttribute,因为默认情况下,所有公共操作都可以通过RouteConfig中配置的URL获得。
默认路线是:
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
希望这有助于解决您的问题。