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

时间:2015-01-26 04:26:09

标签: c# ajax asp.net-mvc razor html-helper

我们是否应该能够在调试器中跟踪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();    
}

2 个答案:

答案 0 :(得分:2)

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

同时检查

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

答案 1 :(得分:1)

您的操作名称为Di d ItWork,但您向Di t ItWork发送请求。但是对于该功能安装一些工具或使用已存在于您的Web浏览器中以检查请求发送的位置(例如我在firefox中使用firebug)。