asp.net mvc - непоследовательный рендеринг ActionLink - PullRequest
3 голосов
/ 22 сентября 2011

У меня есть контроллер, который принимает URL-адреса в следующих двух форматах:

  • Network / AddOrEdit -> отображает пустую форму на странице для добавления нового сетевого объекта
  • Network / AddOrEdit / [id] -> отображает страницу с предварительно заполненной формой для редактирования сетевого объекта с идентификатором [id]

Очевидно, что в каждом случае используется одно и то же представление - одна из моих целей разработки - использовать одно и то же представление для добавления и редактирования.

Главная страница содержит ссылку на страницу добавления, например:

@Html.ActionLink("Add", "AddOrEdit", "Network")

Обычно это правильно выглядит как /Network/AddOrEdit.

Однако, когда я нахожусь на странице редактирования (то есть текущий URL имеет формат Network/AddOrEdit/[id]), тогда ссылка «Добавить» отображается с этим идентификатором в конце, поэтому ссылка «Добавить» фактически указывает на страницу редактирования. Это не то, что я хочу!

По какой-то причине MVC, по-видимому, позволяет текущему идентификатору из строки запроса вмешиваться в рендеринг ActionLink.

Любые предложения, что я могу сделать по этому поводу? (

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Ваше предположение верно.Механизм маршрутизации MVC может повторно использовать переменные маршрута из текущего запроса для генерации данных исходящего маршрута.Вот почему параметр id заполняется из текущего запроса.Вы должны явно указать id при генерации ссылки

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty }, null)

А когда система маршрутизации видит маршрут с необязательным параметром id, а значение маршрута с string.Empty, в конце концов генерирует ссылку без id

2 голосов
/ 22 сентября 2011

Попробовал сам:

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = UrlParameter.Optional })

По-видимому, этот тоже работает.

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty })

Надеюсь, это работает и для вас.

...