从Javascript ASP.NET调用[HTTPPost]

时间:2018-02-21 21:01:16

标签: javascript asp.net http-post

我在我的控制器中使用一种从API导入数据的方法。我希望从两个位置调用此方法。首先是视图(当前正在工作),其次是javascript函数。

启动控制器方法:

[ActionName("ImportRosters")]
    [HttpPost]
    public ActionResult PerformImportRosterData(int id, int? actualLength, int? rosterLength)
    {
        var authenticator = Authenticator(id);
        var rosters = authenticator.Api().RosterData().ToDictionary(x => x.Id);

        var databaseRosterDatas = SiteDatabase.DeputyRosterData.Where(x => x.SiteID == id)
            .ToDictionary(x => x.Id);

Javascript功能:

$("#btnDeputyRunNowUpdate").click(function() {
    $("#btnRunDeputyNow").modal("hide");
    ActualLength = $("#actualRunLength").val();
    RosterLength = $("#rosterRunLength").val();
    $.ajax({
        type: "POST",
        url: "/deputy/PerformImportRosterData",
        data: { SiteIDRoster, ActualLength, RosterLength }
    });
    SiteIDRoster = null;
    location.reload();
    $("#btnRunDeputyNow").modal("hide");
    toast.show("Import Successful", 3000);
});

正在设置所有值,但我在网址行上收到404错误 POST https://example.org/deputy/PerformImportRosterData 404()

我需要一种能够从html和JS

调用这个c#方法的方法

2 个答案:

答案 0 :(得分:1)

如果您要修改AJAX中的URL,可以这样做。它应该看起来像

url: '<%= Url.Action("YourActionName", "YourControllerName") %>'

url: @Url.Action("YourActionName", "YourControllerName") 

还有一件事,我不知道你是否对呼叫的结果做了什么。你的脚本没有成功部分

 success: function(data) {//do something with the return}

并且在您的通话中使用错误处理程序会非常有帮助。 关于AJAX应该如何的完整示例:

$.ajax({
  url: "target.aspx",
  type: "GET",
  dataType: "html",
  success: function (data, status, jqXHR) {
   $("#container").html(data);
    alert("Local success callback.");
   },
   error: function (jqXHR, status, err) {
     alert("Local error callback.");
  },
  complete: function (jqXHR, status) {
     alert("Local completion callback.");
  }
})

有关AJAX的优秀教程,请阅读this document

评论后更改: 我目前的代码如下:

$("#btnDeputyRunNowUpdate").click(function() {
    $("#btnRunDeputyNow").modal("hide");
    ActualLength = $("#actualRunLength").val();
    RosterLength = $("#rosterRunLength").val();
    $.ajax({
        type: "POST",
        url: '<%= Url.Action("PerformImportRosterData", "DeputyController") %>',
        data: { SiteIDRoster, ActualLength, RosterLength },

        success: function(data) {
            console.log(data);
            console.log("TESTHERE");

        }
    });
}

<强>更新 注意到还有一件事。您在控制器和AJAX中的参数不匹配。请尝试用以下代码替换AJAX调用中的几行:

    url: "/deputy/PerformImportRosterData",
    data: { id: yourIDValue,  actualLength: youractualLengthValue,  
            rosterLength :yourrosterLengthValue }

记得在javascript中设置所有变量值,如果它们没有值,则将它们设置为null。

您可以尝试复制下面的粘贴代码

$.ajax({
    type: "POST",
    url: "/deputy/PerformImportRosterData",
    data: { SiteIDRoster:999, ActualLength:1, RosterLength:2 }
});

让我知道它是否会造成任何错误。

答案 1 :(得分:0)

尝试解决几天后,我通过创建两种导入数据的方法创建了一种解决方法。一个用于httpPost,另一个用于从javascript导入调用。

不是一个很好的解决方案,但它有效。谢谢你的帮助Yuri