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