javascript - Controller 从 Javascript post 接收到错误的参数值

标签 javascript asp.net-mvc

我刚刚创建了一个 Javascript 函数和一个基于另一个按预期工作的 Controller 方法。 Javascript 值似乎是正确的,但是当它到达 Controller 时,它被更改为 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.")
         }
     }) }

这是 Controller 方法:

 [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.")
         }
     }) }

Controller :

 [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);
     }
 }

如您所见,我的函数是之前函数的副本。我不知道为什么它带有那个值!

最佳答案

int 类型变量的默认值为 0。因此,由于 submissionID 未绑定(bind),因此变量具有默认值。

检查 RouteConfig(通常在 App_Start 文件夹中可用)。可能有为 ToggleNSFW 操作而不是为您的操作编写的路由 - ToggleArchivar

添加以下路由并检查它是否有效:

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

将“YourControllerName”名称替换为 Controller 的实际名称。

另一种选择是将 submissionID 参数重命名为 id,以便默认模型绑定(bind)程序绑定(bind)该值。

关于javascript - Controller 从 Javascript post 接收到错误的参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56781877/

相关文章:

php - 这是有效的重定向语句吗?

javascript - 主干同步问题触发 POST 而不是 PUT

c# - 如何制作 1 :many relationship between models with different query ( linq syntax )

asp.net-mvc - 使ajax get在auth超时时重定向主页以登录

c# - 你能用参数做一些像 RoutePrefix 这样的事情吗?

javascript - 为什么音视频事件不冒泡?

javascript - "click"事件调用外部函数而不是作用域函数。这本质上就像将内联 javascript 附加到 dom 吗?

Javascript 从文本区域获取文本并发布到 php 页面

c# - 强类型 T4MVC Action /ActionLink

asp.net-mvc - MVC 脚手架 - 引用程序集中缺少类