单击客户端上的按钮时执行控制器操作

Executing a controller action when a button is clicked on the client

我们是否应该能够在调试器中跟踪 AJAX 调用以查看发生了什么?因为出于某种原因,电话似乎没有转到它应该去的地方。

单步执行程序时,在 url: '@URL.Action("DidItWork", "Home") 调用之后,它会转到:

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

后面还有其他几种方法;但是,它似乎没有命中 DidItWork() 操作方法中的任何代码行(基于断点)。

然后我得到 Error: Not Found. Status: error. Console: [object Object]

Thoughts/suggestions 如何解决 @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();    
}

请检查您从 ajax 调用的操作名称。它与控制器中的操作名称不同。在调用 ajax 之前还要检查 jquery 是否已加载。我希望它会有所帮助。

还要检查

中是否使用了任何过滤器
public static ApplicationDbContext Create()

您的操作名称是 DidItWork,但您正在向 DitItWork 发送请求。但是对于这个功能,安装一些工具或者使用你的网络浏览器中已经存在的工具来检查请求发送到哪里(例如我在 firefox 中使用 firebug)。