Подтвердить что ты не робот

URLAction включает идентификатор при создании URL-адреса

Я использую ASP.Net MVC. Здесь мои фрагменты кода из контроллера с именем Course:

public ActionResult List(int id)
{
    var viewmodel.ShowUrl = Url.Action("Show", "Course");


    ...
}

public ActionResult Show(int id)
{
  ...
}

viewmodel.ShowUrl выбирает независимо от значения параметра id. Таким образом viewmodel.ShowUrl становится "/Course/Show/151" (значение id равно 151); Я хочу иметь возможность установить идентификационную часть на клиенте на основе взаимодействия с пользователем. Я хочу, чтобы значение viewmodel.ShowUrl было "/Course/Show".

Это кажется ошибкой для меня. Я не говорю Url.Action, чтобы включить значение id. Он делает это сам по себе. Если я хочу установить значение id, я бы сделал следующее:

var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});

Итак, как вы мешаете MVC добавлять значение id? Я могу hardcode viewmodel.ShowUrl в "/Course/Show", но это похоже на решение kludgy. Спасибо.

4b9b3361

Ответ 1

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

routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } //Parameter defaults
);

Обратите внимание на включение id = UrlParameter.Optional. Без этого вы получите поведение, которое вы описываете, потому что оно считает, что идентификатор является обязательным.

На стороне примечания, если ваше действие Show не всегда имеет идентификатор, оно должно быть равно NULL или предоставить значение по умолчанию.

public ActionResult Show(int? id)
public ActionResult Show(int id = 0)

В противном случае вы получите сообщение об ошибке при попытке загрузить URL-адрес без параметра id.

Ответ 2

Просто натолкнулась на ту же проблему, и вы знаете, вы также можете просто использовать пустую строку:

@Url.Action("Show", "Course", new { id = "" })

Ответ 3

Я знаю, что это старо, но я нашел это первым, но мне не понравилось ни одно из этих решений, поэтому я продолжал искать и находил fooobar.com/info/106644/....

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

Url.Action("Show", "Course", new { id = UrlParameter.Optional })