Контроллер получает неправильное значение параметра из сообщения Javascript - PullRequest
1 голос
/ 27 июня 2019

Я только что создал функцию Javascript и метод контроллера, основанный на другом, который работает как положено.Значение Javascript кажется правильным, но когда оно достигает контроллера, оно меняется на 0. Я попытался заново выполнить всю функцию с нуля с теми же результатами.

Редактировать: в журнале консоли,е имеет правильное значение .

Редактировать 2: так выглядит запрос.с номером все в порядке! и точно так же, как другой метод получает номер.

this is how it looks the request

Это код javascript, где e - правильное значение (это идентификатор сообщения):

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

Как видите, мои функции являются копией предыдущих.Я не могу сказать, почему это происходит с таким значением!

1 Ответ

3 голосов
/ 27 июня 2019

Значение по умолчанию для переменной типа 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, чтобы связыватель модели по умолчанию связывал значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...