为什么jquery ajax方法只能调用webmethod

时间:2016-02-14 16:25:09

标签: c# jquery ajax jquery-ajaxq

在使用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方法调用。

1 个答案:

答案 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 }
);

希望这有助于解决您的问题。