Атрибут маршрутизации в C# - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь передать дополнительный параметр в функцию ActionResult (). У меня есть файл JavaScript, который содержит функцию AddCustomCourse ().


function AddCustomCourse() {
    var formModal = new QCI.BootstrapFormModal.BootstrapFormModal(window.pageVars.AddCustomCourseUrl, {
        title: "Add Custom Course",
        actionButtonText: "Add Course",
        beforeSubmitAction: UpdateCKEditors,
        successCallback: UpdateDataTables,
    });

    formModal.OpenModal();
}

Я определил переменную pageVar на странице index.cs html под названием AddCutomCourseUrl, которая вызывает вспомогательный метод URL:

<script>
    var pageVars = {
        AddCustomCourseUrl: '@Url.Admin_CurriculumCourses_AddCustomCourse(Model.curriculumID)',
    }
</script>

Вот определение вспомогательной функции:

 public static string Admin_CurriculumCourses_AddCustomCourse(this UrlHelper helper, int curriculumID)
    {
      return helper.RouteUrl(new { area = "Admin", controller = "CurriculumCourses", action = "AddCustomCourse", curriculumID });
    }

, а вот метод ActionResult:

  [HttpGet, Route("AddCustomCourse")]
    public ActionResult AddCustomCourse(int curriculumID)
    {
      var viewModel = _curriculumService.GetAddDetailsForCustomCourse(curriculumID, CurrentUser.UserID);
      return this.Json(new JsonResultVM(true, this.RenderPartialViewToString("_AddCustomCourse", viewModel)), JsonRequestBehavior.AllowGet);
    }

Модель, которую я передаю, содержит две переменные , curriculumID & userID. Я пытаюсь передать userID вместе с curriculumID. Я уже убедился, что обе переменные установлены; однако, когда я изменяю предыдущие функции, чтобы добавить дополнительный параметр, userID всегда равен null и currivulumID передается нормально. Вот что я сделал:

<script>
    var pageVars = {
        AddCustomCourseUrl: '@Url.Admin_CurriculumCourses_AddCustomCourse(Model.curriculumID, Model.userID)',
    }
</script>
 public static string Admin_CurriculumCourses_AddCustomCourse(this UrlHelper helper, int curriculumID, int? selectedUserID)
    {
      return helper.RouteUrl(new { area = "Admin", controller = "CurriculumCourses", action = "AddCustomCourse", curriculumID, selectedUserID });
    }
[HttpGet, Route("AddCustomCourse")]
    public ActionResult AddCustomCourse(int curriculumID, int? selectedUserID)
    {
      var viewModel = _curriculumService.GetAddDetailsForCustomCourse(curriculumID, selectedUserID, CurrentUser.UserID);
      return this.Json(new JsonResultVM(true, this.RenderPartialViewToString("_AddCustomCourse", viewModel)), JsonRequestBehavior.AllowGet);
    }

Я не уверен, что происходит.

1 Ответ

0 голосов
/ 23 марта 2020

Вы не ставите необязательный параметр в своем последнем параметре.

[HttpGet("AddCustomCourse/{curriculumID}/{selectedUserID?}")] // <= Your Last Parameter is optional,sometimes may be null so add ? behind the parameter name.
public ActionResult AddCustomCourse(int curriculumID,int? selectedUserID) // Then it accept parameter. 
{
      // You should validate the model. 
      if (!ModelState.IsValid) return BadRequest(ModelState);
      var viewModel = _curriculumService.GetAddDetailsForCustomCourse(curriculumID, selectedUserID, CurrentUser.UserID);
      return this.Json(new JsonResultVM(true, this.RenderPartialViewToString("_AddCustomCourse", viewModel)), JsonRequestBehavior.AllowGet);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...