我们是否应该能够在调试器中跟踪AJAX调用以查看发生了什么?因为出于某种原因,似乎呼叫不会到达应该去的地方。
当单步执行该程序时,url: '@URL.Action("DidItWork", "Home")
调用后,它将转到:
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
其他几种方法;但是,它似乎没有碰到DidItWork()动作方法中的任何代码行(基于断点)。
然后我得到Error: Not Found. Status: error. Console: [object Object]
关于如何解决@ Url.Action调用问题的想法/建议没有在DidItWork()操作方法中设置任何断点?因为@ Url.Action调用没有达到到达SendEmailAsync()的预期效果。
以下代码位于_Layout.cshtml
@*script for someone who presses the send/email button*@
<script>
$("#sendButton").click(function () {
alert("Send button pressed");
$.ajax({
url: '@Url.Action("DitItWork", "Home")',
success: function (result) {
alert("Success. It worked: " + result);
},
error: function( xhr, status, errorThrown ) {
alert("Sorry, there was a problem! Error: " + errorThrown + ". Status: " + status + ". Console: " + xhr);
console.log("Hello");
console.log("Error: " + errorThrown);
console.log("Status: " + status);
console.dir(xhr);
console.log("Good-bye");
},
});
return false;
});
</script>
以下代码位于HomeController.cs
中[AllowAnonymous]
public async Task<ActionResult> DidItWork()
{
var dash = "dash equals nash";
var manager = HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
var user = new ApplicationUser { UserName = "test2 username2", Email = "testemail2@gmail.com" };
var result = await manager.CreateAsync(user, "passwordGoesHere1!");
if (result.Succeeded)
{
await manager.SendEmailAsync(user.Id, "Confirm your account", "Please confirm your account");
return View();
}
//AddErrors(result);
return View();
}
答案 0 :(得分:2)
请检查您从ajax调用的操作名称。它与您控制器中的操作名称不同。在调用ajax之前还要检查jquery是否已加载。我希望它会有所帮助。
同时检查
中是否使用了任何过滤器public static ApplicationDbContext Create()
答案 1 :(得分:1)
您的操作名称为Di d ItWork,但您向Di t ItWork发送请求。但是对于该功能安装一些工具或使用已存在于您的Web浏览器中以检查请求发送的位置(例如我在firefox中使用firebug)。