Создать T4MVC ActionLink с фрагментом URL - PullRequest
10 голосов
/ 27 мая 2010

Есть ли способ создать строго типизированный T4MVC ActionLink с хешем / фунтом / фрагментом в нем?

Например, вот ссылка, которую я хотел бы создать:

<a href="/Home/Index#food">Feed me</a>

Но для объекта T4MVC нет расширения, способного это сделать.

<%= Html.ActionLink("Feed me", T4MVC.Home.Index()) %>

Итак, в конечном итоге мне нужно создать действие, а затем внедрить его таким образом:

<a href="<%= Url.Action(T4MVC.Home.Index()) %>"#food>Feed me</a>

Это не очень желательно. У кого-нибудь есть идеи / предложения?

Заранее спасибо

Ответы [ 4 ]

9 голосов
/ 27 мая 2010

В ASP.NET MVC 2.0 были добавлены новые помощники, позволяющие указать фрагмент . Пример:

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
8 голосов
/ 27 мая 2010

Такой подход - единственный, о котором я могу подумать, который кажется (мне) немного лучше, чем писать якорь вручную:

${Html.ActionLink("Feed me", T4MVC.Home.Index(), Fragment: "food")}

Помимо spark viewengine - стоит 1 старый добрый метод расширения htmlhelper и именованные параметры.


Я предполагаю, что это не доступно в стандартном представлении просмотра? Я решил написать быстрое расширение для ActionLink, но оно не элегантно, и мне бы хотелось, чтобы какое-либо решение было доступно другим в будущих версиях T4MVC.

Spark заменяет <% =%> на $ {}. Упоминается только потому, что я предпочитаю это (вы должны попробовать, если подчеркиваете элегантность кода). C # 4.0 требуется для использования именованных параметров.

Это потому, что я хотел бы избежать потери информации, с которой сопоставляется аргумент "food".


И да, я полностью согласен с Маттиасом Якобссоном.

2 голосов
/ 29 мая 2010

Обновление : эта перегрузка включена в T4MVC 2.6.56

Да, для полноты мы, вероятно, должны добавить это в T4MVC.Это должно быть легко сделать, за исключением того, что мы получим большую перегрузку, если начнем добавлять протокол / имя хоста.

Все будет проще, если мы перестанем поддерживать Fx 3.5, потому что мы можем положиться наdefault / named params, которые очень помогают в уменьшении адской перегрузки.Но до сих пор я избегал этого шага, потому что еще не все на версии 4.0.

Возможно, мне следует заморозить текущую версию как последнюю совместимую с Fx 3.5 / MVC 1.x, а затем поддерживать только Fx 4.0 /MVC 2 в более новых сборках (сохраняя старый до бесконечности).Во всяком случае, я отвлекся:)

1 голос
/ 09 мая 2012

Дэвид Эббо добавил эту функцию в T4MVC на основе аналогичного вопроса , который я задал в StackOverflow.

...