簡體   English   中英

將HREF轉換為RouteLink

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM