控制器从Javascript post接收错误的参数值
我刚刚创建了一个Javascript函数和一个控制器方法,它基于另一个按预期工作的函数和方法。Javascript值似乎是正确的,但当它到达控制器时,它被更改为0。我尝试从头开始重新执行整个函数,但结果相同 编辑:在控制台日志上,e具有正确的值 编辑2:这是请求的外观。号码没问题这与另一个方法获取数字的方式相同 这是javascript代码,其中e是正确的值(它是post ID):控制器从Javascript post接收错误的参数值,javascript,asp.net-mvc,Javascript,Asp.net Mvc,我刚刚创建了一个Javascript函数和一个控制器方法,它基于另一个按预期工作的函数和方法。Javascript值似乎是正确的,但当它到达控制器时,它被更改为0。我尝试从头开始重新执行整个函数,但结果相同 编辑:在控制台日志上,e具有正确的值 编辑2:这是请求的外观。号码没问题这与另一个方法获取数字的方式相同 这是javascript代码,其中e是正确的值(它是post ID): 函数toggleArchivar(e){//我已经对它进行了调试,并且e具有正确的值 $.ajax({ 类型:“
函数toggleArchivar(e){//我已经对它进行了调试,并且e具有正确的值
$.ajax({
类型:“POST”,
url:“/submissions/togglearchivar/”+e,
成功:功能(t){
t、 成功?(t.data?$(“#submissionid-”+e+“p.title”)。前置('archivado'):
$(“#archivadoTag”).remove(),$(“#toggleArchivar”).html(“nsfw”):
$(“#toggleArchivar”).html(t.error.message)
},
错误:函数(){
警报(“错误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);
}
}
[授权]
[HttpPost]
[VoatValidateAntiForgeryToken]
[第(5)款]
公共异步任务ToggleArchivar(int submissionID)//submissionID附带0!!!
{
使用(var repo=新存储库(用户))
{
var响应=等待回购ToggleArchivar(提交ID);
返回JsonResult(响应);
}
}
例如,我调试的工作表,其值匹配:
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.")
}
}) }
函数toggleNSFW(e){
$.ajax({
类型:“POST”,
url:“/submissions/togglensfw/”+e,
成功:功能(t){
t、 成功?(t.data?$(“#提交ID-”+e+“p.title”)。前置('NSFW'):
$(“#nsfwflair”).remove(),$(“#togglensfw”).html(“nsfw”):
$(“#togglensfw”).html(t.error.message)
},
错误:函数(){
警报(“错误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);
}
}
[授权]
[HttpPost]
[VoatValidateAntiForgeryToken]
[第(5)款]
公共异步任务ToggleNSFW(int submissionID)
{
使用(var repo=新存储库(用户))
{
var响应=等待回购ToggleNSFW(提交ID);
返回JsonResult(响应);
}
}
如您所见,我的函数是以前函数的副本。我不知道为什么会有这样的价值 类型变量
int
的默认值为0。因此,由于submissionID
未绑定,因此变量具有默认值
检查RouteConfig
(通常在App\u Start
文件夹中提供)。可能有为ToggleNSFW
操作编写的路由,但没有为您的操作-ToggleArchivar
编写路由
添加以下路线并检查其是否有效:
routes.MapRoute(
name: "ToggleArchivar",
url: "{controller}/{action}/{submissionID}",
defaults: new { controller ="YourControllerName", action = "ToggleArchivar", submissionID = UrlParameter.Optional }
);
将“YourControllerName”名称替换为控制器的实际名称
另一个选项是将
submissionID
参数重命名为id
,以便默认模型绑定器将绑定该值。您是否尝试了console log e值?是的,它是正确的值RouteConfig中有什么?哦,哇,我想这是我缺少的!我无法从办公室访问数据库,但我一到家就会检查!
routes.MapRoute(
name: "ToggleArchivar",
url: "{controller}/{action}/{submissionID}",
defaults: new { controller ="YourControllerName", action = "ToggleArchivar", submissionID = UrlParameter.Optional }
);