Параметры ActionLink всегда равны нулю — даже при пользовательской маршрутизации

#c# #asp.net-mvc-5

#c# #asp.net-mvc-5

Вопрос:

Приложение управляет запросами. Существует ActionLink, который должен передавать идентификатор запроса, чтобы его можно было сбросить. Вызывается правильный контроллер / действие, но идентификатор запроса всегда равен нулю.

Если я изменю последний параметр пользовательского маршрута (показанный ниже) на id =»TEST», то «TEST» будет передан в функцию — так что я знаю, что выбран правильный маршрут.

В контроллере BrowseController.cs

  [HttpGet]
 public ActionResult ResetRequest(string id )
 {
   return View();
 }
  

В View BrowseRequests.cshtml есть ссылка для сброса запроса

     @Html.ActionLink(
    "Reset", 
    "ResetRequest", 
    "Browse", 
    new {id = item.RS_RequestID.ToString() });
  

Я попробовал маршрутизацию по умолчанию в RouteConfig.cs, а затем попытался вставить следующее перед значением по умолчанию.

     routes.MapRoute(
       name:"ResetRequest",
       url:"Browse/ResetRequest/{id}",
       defaults: new { controller = "Browse", 
                       action = "ResetRequest", 
                       id=UrlParameter.Optional});
  

Комментарии:

1. Работает ли добавление null в конце new {id = item.RS_RequestID.ToString()}, null) ?

Ответ №1:

Правильная перегрузка для вашей ActionLink будет

 HtmlHelper.ActionLink(string linkText,string actionName,string ControllerName, object routeValues, object htmlAttributes);
  

таким образом, вам не хватает атрибутов object htmlAttributes, которые вы можете передать как null

 @Html.ActionLink("Reset","ResetRequest","Browse", new {id = item.RS_RequestID.ToString() }, null);
  

Комментарии:

1. Да — это также работает для меня. Поскольку это более полное выражение, я решил использовать это решение. Большое спасибо.

Ответ №2:

Порядок значений, которые вы передаете в ActionLink, неверен

используйте действие, контроллер, значения маршрута, htmlАргументы

Вашим первым аргументом должен быть ResetRequest

Ответ №3:

Ваше предложение привело к ошибке «ресурс не найден». Это заставило меня задуматься, что, возможно, я использовал неправильную подпись для ActionLink.

Я нашел переопределение, которое не указывало контроллер — только действие. Это то, что сработало для моих целей

     @Html.ActionLink(
      "Reset", 
      "ResetRequest", 
      new { id = item.RS_RequestID.ToString() });