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# 方法后面的代码的主要内容,如果未能解决你的问题,请参考以下文章
带有自定义标头的跨域 jquery ajax api 调用未命中服务器
来自弹出表单的 ajax 数据发布未命中控制器方法 ASP.NET MVC