Ajax 调用未命中 C# 方法后面的代码

Posted

技术标签:

【中文标题】Ajax 调用未命中 C# 方法后面的代码【英文标题】:Ajax call not hitting code behind c# method 【发布时间】:2020-01-24 19:49:38 【问题描述】:

我有一个 jQuery ajax 调用

 <script type="text/javascript">
        $(document).ready(function () 
            $('#MainContent_minuteBooks').click(function (e) 

                e.preventDefault();

                $.ajax(
                    type: "GET",
                    url: "MainView.aspx/GetPageTypes",
                    error: function (XMLHttpRequest, textStatus, errorThrown) 
                        console.log("Request: " + XMLHttpRequest.toString() + "\n\nStatus: " + textStatus + "\n\nError: " + errorThrown);
                    ,
                    success: function (response) 
                        console.log("--" + JSON.stringify(response));
                    
                );

            );
        );
    </script>

这应该在WebMethod后面调用我的代码

        [WebMethod]
        public static string GetPageTypes()
        
            List<string> pages = new List<string>();
            string html = "";
            Console.WriteLine(book.Count);


            foreach(MinuteBookPage mbp in book)
            
                if (!pages.Contains(mbp.Class))  pages.Add(mbp.Class); ;
            

            foreach(string s in pages)
            
                html += "<div class='page' style='border: solid 2px red'><p>" + s + "</p></div>";
            
            Console.WriteLine(html);

            return html;

        

我在方法上设置了断点,还有应该显示的Console.WriteLine,断点没有命中,控制台不输出任何东西

我被引导相信我的方法没有被调用

在显示的网络选项卡中, First call ,在这个 301 响应之后还有第二个调用,它只是返回页面 html/javascript

成功后,ajax 调用返回我所在页面的 html 和 JavaScript 标记

我看过这个链接Pagemethods in asp.net,但它似乎已经过时了,我看过的所有其他资源似乎都没有遵循它的概述

【问题讨论】:

好吧,所以我将 url 更改为 url: "MainView/GetPageTypes" 301 不再发生,但仍然没有在 WebMethod 中遇到断点 方法保存在代码隐藏中。所以 MainView.aspx 有我的 ajax 调用,而 MainView.aspx.cs 拥有我试图达到的方法。我没有使用 MVC 类型方法 啊,对不起,我错过了那个标签。在这种情况下,您需要在您的 URL 中使用.aspx。查看此链接:***.com/questions/6928533/… 这可能听起来很奇怪,但请尝试调整您的 ajax 调用以模拟答案中提到的那个(使用type; 'POST' 和所有这些)。 @Dortimer 使用 WebMethod,没有控制器。 WebMethod 在 .aspx 页面上声明并通过页面的 URL 访问。您应该删除不再相关的 cmets。 在发布该帖子之后,将AutoRedirectMode 关闭,我能够让它调用该函数。谢谢你。我将发布我的最终电话,以便其他人可以看到它的样子 【参考方案1】:

感谢@Dortimer 将我指向这篇文章,并帮助我解决了这个问题。

How to properly make an ajax call with webforms

我最终得到了以下代码

Ajax call

<script type="text/javascript">
        $(document).ready(function () 
            $('#MainContent_minuteBooks').click(function () 
                console.log("inside click");

                $.ajax(
                    type: 'POST',
                    url: '<%= ResolveUrl("~/MainView.aspx/GetPageTypes") %>',
                    data: ' ',
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    success: function (msg) 
                        console.log(msg)
                    
                );
                return false;
            );
        );
    </script>

我还必须关闭 RouteConfig.cs 文件中的 RedirectMode

        public static void RegisterRoutes(RouteCollection routes)
        
            var settings = new FriendlyUrlSettings();
            settings.AutoRedirectMode = RedirectMode.Off;
            routes.EnableFriendlyUrls(settings);
        

【讨论】:

以上是关于Ajax 调用未命中 C# 方法后面的代码的主要内容,如果未能解决你的问题,请参考以下文章

在 asp.net 中的 AJAX 调用未命中成功事件

带有自定义标头的跨域 jquery ajax api 调用未命中服务器

来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC

Ajax 调用数据在 POST 期间未传递给控制器

如何在对引发异常的 C# webmethod 的 ajax 调用上指定消息?

弹出窗口中的ajax数据发布未命中控制器方法ASP.NET MVC