Можно ли использовать ActionLink, содержащий элемент?

#c# #asp.net-mvc-3 #syntax #razor #actionlink

#c# #asp.net-mvc-3 #синтаксис #razor #actionlink

Вопрос:

Как говорится в вопросе, можно ли использовать ActionLink, содержащий элемент, и если нет, то каков наилучший способ его достижения?

Например, допустим, у меня есть Span элемент, я хочу, чтобы все это было гиперссылкой… Работает следующее:

 <a href="/Site/Page/@Model.ID?Type=test">
                <span class="box5">Click anywhere in this box</span> </a>
  

Представьте, что класс span / css box5 делает это большим… Изначально был DIV, но я обнаружил, что это не соответствует стандартам, и, похоже, все в порядке.

Это отображается и работает нормально, но есть ли возможность использовать ActionLink вместо этого? Я попытался угадать синтаксис, такой как (копирование из форм):

 @using (Html.Actionlink){<span class="box5">Click anywhere in this box</span>}
  

и многие другие комбинации без какой-либо удачи.

Теперь мой ручной обходной путь HTML работает нормально, и я рад оставить его, но можно ли использовать MVC ActionLink, и если да, стоит ли мне вообще беспокоиться / будут ли какие-либо преимущества?

Ответ №1:

Вместо этого просто используйте @Url.Action:

 <a href="@Url.Action("Page","Site", new { id = Model.Id, @Type = "test" })">
 <span class="box5">Click anywhere in this box</span> </a>
  

Ответ №2:

Есть способ обойти ограничение, который вы можете использовать

 @Html.Raw(
     Html
        .ActionLink("-replace-me-", .....)
        .ToString()
        .Replace(
              "-replace-me-", 
              @"<span class=""box5"">Click anywhere in this box</span>"))
  

это не элегантно, но оно выполняет свою работу

Комментарии:

1. воспользуйтесь предложением Майкла Стама, но держите этот хак в своем заднем кармане, он может пригодиться при использовании Ajax. ActionLink

2. 1 конечно — я не хотел редактировать / перефразировать вопрос после получения ответа, но я решил, что хочу, чтобы это были ссылки Ajax, и, похоже, это решение работает (после того, как застрял все утро)… итак, 1/ ответ Майклу, но 1 и вам.

3. Я не уверен, что делаю это неправильно, но он просто отображается как текст… Я предполагаю, что razor делает свое дело за кулисами. Кажется, что все это заключено в оболочку. @Html.Raw() .. Сначала это выглядит сбивающим с толку, но это потрясающе!

Ответ №3:

Html.ActionLink это просто простой старый метод расширения HtmlHelper объекта.

Вы также можете создавать свои собственные методы расширения HtmlHelper , и они довольно просты в использовании и сэкономят вам кучу времени.

Ответ №4:

Вы не можете указать html-тег внутри actionlink, но я могу предложить вам два решения: 1 расширить actionlink с помощью вашей функции. Таким образом, вы также можете реализовать actionlink, которые генерируют href с другим тегом htmal внутри (img или span, как в вашем случае)

2 использование url.content в href. Это похоже на ваш фактический обходной путь, но лучше, потому что вы используете правила, которые вы определили в global.asax вместо использования «волшебной строки»

Ответ №5:

Просто напишите <span> </span> и между промежутками используйте метод @html>ActionLink, он будет работать

Комментарии:

1. Я думаю, что оригинальный плакат хотел, чтобы способ включал только часть текста ссылки в пределах диапазона — другими словами, <span>вложен в <a>, а не наоборот.