编辑:在控制台日志上,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);
}
}
如您所见,我的功能是先前功能的副本。我不知道为什么会有这个价值!
答案 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
,以便默认的模型绑定器可以绑定该值。