控制器从JavaScript帖子接收到错误的参数值

时间:2019-06-26 22:54:03

标签: javascript asp.net-mvc

我刚创建了一个Javascript函数和一个控制器方法,该函数基于另一个按预期运行的方法。 Javascript值似乎是正确的,但是当到达控制器时,它更改为0。我尝试从头开始重新做整个函数,结果相同。

编辑:在控制台日志上,e具有正确的值

编辑2:这是请求的外观。该数字确定!,这与其他方法获取该数字的方法相同。

this is how it looks the request

这是JavaScript代码,其中e是正确的值(它是帖子ID):

 function toggleArchivar(e) { //i've debugged it and e has the correct value
     $.ajax({
         type: "POST",
         url: "/submissions/togglearchivar/" + e,
         success: function (t) {
             t.success ? (t.data ? $("#submissionid-" + e + " p.title").prepend('<span title="archivado" class="flair
 linkflairlabel" id="archivadoTag">archivado</span>') :
 $("#archivadoTag").remove(), $("#toggleArchivar").html("nsfw")) :
 $("#toggleArchivar").html(t.error.message)
         },
         error: function () {
             alert("Error al intentar archivar.")
         }
     }) }

这是控制器方法:

 [Authorize]
 [HttpPost]
 [VoatValidateAntiForgeryToken]
 [PreventSpam(5)]
 public async Task<ActionResult> ToggleArchivar(int submissionID) //SubmissionID comes with a 0!!!
 {
     using (var repo = new Repository(User))
     {
         var response = await repo.ToggleArchivar(submissionID);
         return JsonResult(response);
     }
 }

例如,我已调试且值匹配的工作参数: Javascript:

 function toggleNSFW(e) {
     $.ajax({
         type: "POST",
         url: "/submissions/togglensfw/" + e,
         success: function (t) {
             t.success ? (t.data ? $("#submissionid-" + e + " p.title").prepend('<span title="Not Safe For Work" class="flair
 linkflairlabel" id="nsfwflair">NSFW</span>') :
 $("#nsfwflair").remove(), $("#togglensfw").html("nsfw")) :
 $("#togglensfw").html(t.error.message)
         },
         error: function () {
             alert("Error al intentar poner NSFW.")
         }
     }) }

控制器:

 [Authorize]
 [HttpPost]
 [VoatValidateAntiForgeryToken]
 [PreventSpam(5)]
 public async Task<ActionResult> ToggleNSFW(int submissionID)
 {
     using (var repo = new Repository(User))
     {
         var response = await repo.ToggleNSFW(submissionID);
         return JsonResult(response);
     }
 }

如您所见,我的功能是先前功能的副本。我不知道为什么会有这个价值!

1 个答案:

答案 0 :(得分:3)

int类型变量的默认值为0。因此,由于submissionID没有绑定,因此该变量具有默认值。

选中RouteConfig(通常在App_Start文件夹中可用)。可能有为ToggleNSFW动作写的路由,但没有为您的动作写的路由-ToggleArchivar

添加以下路线,并检查其是否有效:

    routes.MapRoute(
        name: "ToggleArchivar",
        url: "{controller}/{action}/{submissionID}",
        defaults: new { controller ="YourControllerName", action = "ToggleArchivar", submissionID = UrlParameter.Optional }
    );

将“ YourControllerName”名称替换为控制器的实际名称。

另一种选择是将submissionID参数重命名为id,以便默认的模型绑定器可以绑定该值。