リンクテキストにHTML要素を含むActionLinkを作成する
ASP.NET MVCビューに、次の形式のリンクを含めたいです。
_<a href="blah">Link text <span>with further descriptive text</span></a>
_
Html.ActionLink()
の呼び出しのlinkText
フィールドに_<span>
_要素を含めようとすると、(予想どおり)エンコードされます。
これを達成するための推奨される方法はありますか?
Url.Actionを使用してリンクを作成できます。
<a href="<% =Url.Action("Action", "Controller")%>">link text <span>with further blablah</span></a>
または、Html.BuildUrlFromExpressionを使用します。
<a href="<% =Html.BuildUrlFromExpression<Controller>(c => c.Action()) %>">text <span>text</span></a>
razorを使用する場合は、これでうまくいくはずです。
<a href="@Url.Action("Action", "Controller")">link text <span>with further blablah</span></a>
別のオプションは、HTML.ActionLinkまたはAjax.ActionLink(コンテキストに応じて)を使用して、通常どおりにMvcHtmlStringへのアクションリンクをレンダリングし、レンダリングされたMvcHtmlStringを受け取り、htmlリンクテキストを直接ハックするクラスを記述します。既にMvcHtmlStringをレンダリングし、別のMvcHtmlStringを返します。
したがって、これは次のことを行うクラスです。
namespace Bonk.Framework
{
public class CustomHTML
{
static public MvcHtmlString AddLinkText(MvcHtmlString htmlString, string linkText)
{
string raw = htmlString.ToString();
string left = raw.Substring(0, raw.IndexOf(">") + 1);
string right = raw.Substring(raw.LastIndexOf("<"));
string composed = left + linkText + right;
return new MvcHtmlString(composed);
}
}
}
そして、次のようなビューで使用します。
@Bonk.Framework.CustomHTML.AddLinkText(Ajax.ActionLink("text to be replaced", "DeleteNotificationCorporateRecipient"), @"Link text <span>with further descriptive text</span>")
このアプローチには、タグのレンダリングプロセスを再現または理解する必要がないという利点があります。