Существует ли способ создать 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>
Это не очень желательно. У кого-либо есть какие-либо идеи/предложения?
Заранее спасибо
Такой подход - единственный, о котором я могу думать, который кажется (мне) немного лучше, чем писать якорь вручную:
${Html.ActionLink("Feed me", T4MVC.Home.Index(), Fragment: "food")}
Кроме spark viewengine - это стоит 1 старый добрый метод расширения htmlhelper & именованные параметры.
Я предполагаю, что это недоступно в стандартном viewengine? Я решил написать быстрое расширение для ActionLink, но это не элегантно, и я бы хотел, чтобы любое решение было доступно другим в будущих версиях T4MVC.
Spark заменяет <%=%> на ${}. Упоминается только потому, что мне так больше нравится (вам стоит попробовать, если вы придаете большое значение элегантности кода). Для использования именованных параметров требуется C# 4.0.
Это потому, что я хотел бы избежать потери информации о том, к какому параметру относится аргумент "food".
И да, я полностью согласен с Маттиасом Якобссоном.
В 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 только в более новых сборках (при этом старая версия остается неизменной на неопределенный срок). В общем, я отвлекся :)