【问题标题】:Webmethod does not fireWeb 方法不触发
【发布时间】:2015-06-10 11:56:44
【问题描述】:

我下载了一个源代码,我在 Visual Studio 2013 中尝试过,它没有工作,但是当我使用 Visual Studio 2010 时它工作,我认为在 ASP.Net 4.5 中有一个技巧,我没有不知道。代码如下:

function Load(Skip, Take) {
            $('#divPostsLoader').html('<img src="../ProgressBar/ajax-loader.gif">');

            //send a query to server side to present new content
            $.ajax({
                type: "POST",
                url: "/Grid/LoadImages",
                data: "{ Skip:" + Skip + ", Take:" + Take + " }",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (data) {                        
                    if (data != "") {
                        $('.thumb').append(data.d);
                    }
                    $('#divPostsLoader').empty();
                }
            })

        };

这是永远不会运行的 Web 方法:

[WebMethod(EnableSession = true)]
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
public static string LoadImages(int Skip, int Take)
{
    System.Threading.Thread.Sleep(2000);
    StringBuilder GetImages = new StringBuilder();
    string Imagespath = HttpContext.Current.Server.MapPath("~/Images/");
    string SitePath = HttpContext.Current.Server.MapPath("~");
    var Files = (from file in Directory.GetFiles(Imagespath) select new { image = file.Replace(SitePath, "") }).Skip(Skip).Take(Take);
    foreach (var file in Files)
    {
        var imageSrc = file.image.Replace("\\","/").Substring(1); //Remove First '/' from image path
        GetImages.AppendFormat("<a>");
        GetImages.AppendFormat("<li>");
        GetImages.AppendFormat(string.Format("<img src='{0}'/>", imageSrc));
        GetImages.AppendFormat("</li>");
        GetImages.AppendFormat("</a>");


    }
    return GetImages.ToString();
}

有什么建议吗?

谢谢。

【问题讨论】:

  • 你尝试过从签名中删除静态... public static string LoadImages(int Skip, int Take)
  • WebMethod 需要是静态的,因为它们是无状态的并且不需要实例 @Aswartha
  • 我对 webmethods 了解不多。看看 MSDN 能不能帮到你。msdn.microsoft.com/en-us/library/byxd99hx(v=vs.90).aspx
  • 是的,我试过了,还是不行。
  • 请扩展“它不起作用”,并详细说明正在发生的事情以及您期望发生的事情。还有哪些调试步骤(例如,浏览器的开发工具显示了什么?)

标签: c# asp.net webmethod


【解决方案1】:

您是否尝试过单步执行您的 javascript?我敢打赌你会收到 500 错误。

更新

当 AJAX 请求尝试调用 WebMethod 时,OP 会出现 401 未授权。

一旦您允许身份验证,您必须在您的AppStart/RouteConfig.cs 中设置AutoRedirectMode = RedirectMode.Off

查看更多here

【讨论】:

  • 我没有在 javascript 中一步步进行,但我设置了一些警报以便向我显示结果,并且所有这些都在工作,并且再次在 VS 2010 中工作。我改变了两条线,没有任何改变。
  • 我没有得到任何东西后删除了这些行,但是我按照你说的一步一步尝试了它,它给了我这个错误:data = Object {Message:“身份验证失败。”, StackTrace:空,异常类型:“System.InvalidOperationException”}
  • @Amir 更新了答案,请参阅我在RouteConfig.cs 中发布的关于编辑重定向的链接
  • 我看到了那个,但没有成功。当我将其更改为 settings.AutoRedirectMode = RedirectMode.Off;一旦涉及 ajax 行,它就会跳过它,并永久显示进度条。
  • 好的,我发现了问题。我按照你所说的@rageryory 更改了数据,这导致了问题,但我需要你发布的那个链接,所以它起作用了。谢谢。
猜你喜欢
  • 2017-10-30
  • 2012-04-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
相关资源
最近更新 更多