Создать T4MVC ActionLink с фрагментом URL

Есть ли способ создать строго типизированный 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 ответа

Решение

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

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

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


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

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

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


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

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

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>

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

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

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

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

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

Другие вопросы по тегам