[英]Convert HREF to RouteLink
這似乎很簡單,但我無法得到任何工作。 此代碼由我的模板生成器生成,需要更改。
<li><a href="../Home/Contact" class="active"><span class="l"></span><span class="r">
</span><span class="t">Nous contacter</span></a> </li>
我到目前為止最好的選擇是:
<li><span class="l"></span><span class="r"></span>
@Html.RouteLink("Contact", new { Controller = "Home", Action = "Contact" }, new { @class = "t" })</li>
但它沒有做任何事情。 只是為了說明我的問題很明確:鏈接適用於兩種情況,這很好。 格式化不起作用。 這是我的問題。
第二個將產生:
<li>
<span class="l"></span>
<span class="r"></span>
<a class="t" href="/Home/Contact">Contact</a>
</li>
這與您在第一時間可能解釋格式問題的內容不同:
<li>
<a href="../Home/Contact" class="active">
<span class="l"></span>
<span class="r"></span>
<span class="t">Nous contacter</span>
</a>
</li>
Html幫助程序(如Html.ActionLink和RouteLink)的問題在於它們總是通過Html對文本進行編碼,因此您不能將HTML用作文本。 所以一種可能性如下:
<li>
<a href="@Url.RouteUrl("Contact", new { controller = "home", action = "contact" })" class="active">
<span class="l"></span>
<span class="r"></span>
<span class="t">Nous contacter</span>
</a>
</li>
另外一種可能性,如果你有很多生成的是編寫一個自定義的Html幫助程序,它將為你完成這項工作:
public static class HtmlExtensions
{
public static IHtmlString MyLink(
this HtmlHelper htmlHelper,
string linkText,
string routeName,
object routeValues
)
{
var spans = string.Format(
"<span class=\"l\"></span><span class=\"r\"></span><span class=\"t\">{0}</span>",
htmlHelper.Encode(linkText)
);
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
var url = urlHelper.RouteUrl(routeName, routeValues);
var anchor = new TagBuilder("a");
var rvd = new RouteValueDictionary(routeValues);
var rd = htmlHelper.ViewContext.RouteData;
var currentAction = rd.GetRequiredString("action");
var currentController = rd.GetRequiredString("controller");
var controller = rvd["controller"] as string;
var action = rvd["action"] as string;
if (string.Equals(controller, currentController, StringComparison.OrdinalIgnoreCase) &&
string.Equals(action, currentAction, StringComparison.OrdinalIgnoreCase))
{
anchor.AddCssClass("active");
}
anchor.Attributes["href"] = url;
anchor.InnerHtml = spans;
return new HtmlString(anchor.ToString());
}
}
接着:
<li>
@Html.MyLink("Nous contacter", "Contact", new { controller = "home", action = "contact" })
</li>
只需使用這樣的東西:
@Url.Action("Index", "Home")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.