0

在使用 jQuery Ajax 方法时,我知道该方法只能调用 webmethod 或 mvc 的 get/post。为什么我不能使用 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 方法进行调用。

4

1 回答 1

1

你得到的是预期的行为。该问题与 jQuery 无关,而与服务器端代码有关。

您通常通过其 URL 请求资源以获取该资源。

CS.aspx是指向该页面的 URL。

使用CS.aspx/GetCurrentTime实际上是一个不同的 URL 请求不同的资源。

这就是发挥作用的地方WebMethodAttribute。它通过 URL 告诉 ASP.NET 有一个新资源可用CS.aspx/GetCurrentTime,这样 ASP.NET 运行时就知道在对该 URL 发出请求时要做什么。

附带说明: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 }
);

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

于 2016-02-14T16:48:35.053 回答