1

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

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

编辑 2:这就是请求的外观。号码没问题!这与其他方法获取数字的方式相同。

这就是请求的外观

这是 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);
     }
 }

如您所见,我的函数是以前的函数的副本。我不知道为什么它会带来这个价值!

4

1 回答 1

3

类型变量的默认值为int0。因此,由于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以便默认模型绑定器绑定该值。

于 2019-06-27T04:55:31.880 回答