#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>, а не наоборот.