【问题标题】:Page method not called未调用页面方法
【发布时间】:2011-05-19 09:36:36
【问题描述】:

我设置了一个页面方法并尝试通过 jQuery 调用它。有时我到达成功函数,有时到达错误函数,对我来说似乎是随机的。在任何情况下,响应都包含整个页面标记。

我尝试同时使用$.ajaxScriptManager,结果相同。 我也在这里尝试过这个想法:Call ASP.NET PageMethod/WebMethod with jQuery - returns whole page 什么都没有。

这是 JavaScript 代码:

$(document).ready(function() {
    $(".tree").dynatree({
        onActivate: function(node) {
            $('#title').val(node.data.title);
            $.ajax({
                type: "POST",
                url: window.location.href + "/GetData",
                data: "{'ID':22}",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function(response) { alert(response); },
                error: function() { alert('Error!'); }
            });
        }
    });
});

这里是c#代码:

[WebMethod]
public static string GetData(string ID)
{
    if (string.IsNullOrEmpty(ID))
        throw new Exception("No ID passed!");
    return "Test";
}

编辑:好吧,我搞定了。我将参数类型从 int 更改为 string,现在调用该方法。我可以稍后再执行 int.Parse,但为什么会发生这种情况?

【问题讨论】:

  • 当您使用生成的客户端代理时,它是否工作(即 PageMethods.GetData(...)?)
  • @dfowler - 不。结果相同。
  • 你的路由或任何可能与 url 混淆的东西吗?

标签: c# .net asp.net jquery


【解决方案1】:

发生的情况是,在 jQuery 调用中将数据设置为 {} 相当于将其设置为 NULL 的 JSON。在这种情况下,没有接受 null 的 webmethod 并且调用失败。

【讨论】:

  • 对不起。我用正确的版本(带参数)更新了帖子
  • 您的回答为我指明了正确的方向。之前我有:数据:“{'ID':'22'}”,所以 asp.net 正在寻找一个参数类型为字符串的方法。一旦我删除了' - 一切都开始工作了。谢谢!
  • 嗯,有道理。很高兴能帮上忙。
【解决方案2】:

我在我当前的应用程序中做一些非常相似的事情,我能看到的唯一区别是我在我的 ajax 调用中有以下额外选项:

beforeSend: function(xhr) { xhr.setRequestHeader("Content-type", "application/json; charset=utf-8"); }

希望对您有所帮助...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-03
    • 2015-11-09
    • 1970-01-01
    • 2021-11-29
    • 2012-01-17
    相关资源
    最近更新 更多