Создайте ActionLink T4MVC с фрагментом 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>
Это не очень желательно. У кого-нибудь есть идеи/предложения?
Заранее спасибо
Ответы
Ответ 1
Такой подход является единственным, о котором я могу думать, что чувствует (для меня) немного лучше, чем писать якорь вручную:
${Html.ActionLink("Feed me", T4MVC.Home.Index(), Fragment: "food")}
Помимо искрового зрения - он стоит 1 старый добрый метод расширения htmlhelper и именованные параметры.
Я предполагаю, что это недоступно в режиме просмотра по умолчанию? Я решил написать быстрое расширение для ActionLink, но это не изящно, и мне хотелось бы, чтобы любое решение было доступно другим в будущих версиях T4MVC.
Spark заменяет <% =% > на ${}. Упоминается только потому, что я предпочитаю это (вы должны попробовать, если будете подчеркивать элегантность кода). С# 4.0 требуется для использования именованных параметров.
Это потому, что я хотел бы избежать потери информации, к которой карты аргументов параметра "еда".
И да, я очень согласен с Маттиасом Якобсоном.
Ответ 2
В ASP.NET MVC 2.0 добавлены новые помощники, которые позволяют указать фрагмент. Пример:
<%= Html.ActionLink("Feed me", "Action", "Controller", null, null, "food", null, null) %>
Ответ 3
Обновление: эта перегрузка включена в T4MVC 2.6.56
Да, для полноты мы, вероятно, должны добавить это в T4MVC. Это должно быть легко сделать, за исключением того, что мы закончим много перегрузки, если мы начнем добавлять протокол/имя хоста.
Было бы проще, если бы мы перестали поддерживать Fx 3.5, потому что мы могли бы полагаться на параметры по умолчанию /named, которые очень помогают в уменьшении адвера. Но я до сих пор избегаю этого шага, потому что не все еще в 4.0.
Возможно, я должен заморозить текущую версию как последнюю совместимую с Fx 3.5/MVC 1.x, а затем поддерживать только Fx 4.0/MVC 2 в новых сборках (при сохранении старого до бесконечности). Во всяком случае, я отвлекаюсь:)
Ответ 4
Дэвид Эббо добавил эту функцию в T4MVC на основе аналогичного вопроса, который я сделал в StackOverflow.