Создайте 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>

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

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

10
задан Dan Atkinson 16 March 2012 в 16:20
поделиться

3 ответа

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

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

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


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

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

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


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

8
ответ дан 3 December 2019 в 19:31
поделиться

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

<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
9
ответ дан 3 December 2019 в 19:31
поделиться

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

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

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

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

2
ответ дан 3 December 2019 в 19:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: