Создать 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.