簡體   English   中英

在ActionLink()或RouteLink()中提供ID?

[英]Providing ID in ActionLink() or RouteLink()?

我是MVC的新手,並且想向~/Destinations/35地方添加鏈接,該鏈接將引用Destinations控制器的Index視圖,而35是要顯示的目標的ID。

ActionLink()或RouteLink()都沒有顯示來允許我創建這樣的鏈接。

另外,我嘗試了這樣的事情:

<table>
@foreach (var d in ViewBag.Results)
{
    <tr>
        <td>
            @Html.ActionLink(
                String.Format("<b>{0}</b>", @Html.Encode(d.Title)),
                "Details", "Destinations")
        </td>
    </tr>
}
</table>

但是我在ActionLink線上收到以下錯誤,我不理解。

“ System.Web.Mvc.HtmlHelper”沒有名為“ ActionLink”的適用方法,但似乎具有該名稱的擴展方法。 擴展方法不能動態調度。 考慮強制轉換動態參數或在不使用擴展方法語法的情況下調用擴展方法。

有人可以幫我建立這個連結嗎?

代碼的第一個問題是您試圖在鏈接文本( <b>標記)中使用HTML,這是不可能的,因為根據設計,它總是HTML編碼的。

因此,假設您不希望鏈接中包含HTML,則可以執行以下操作:

@Html.ActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null)

假設您在錨點中需要HTML,則有兩種可能:

  1. 編寫一個自定義的ActionLink幫助器,該幫助器不會對文本進行HTML編碼(推薦),然后像這樣使用:

     @Html.MyBoldedActionLink(d.Title, "Details", "Destinations", new { id = "35" }, null) 
  2. 大致情況:

     <a href="@Url.Action("Details", "Destinations", new { id = "35" })"> <b>@d.Title</b> </a> 

並且由於我推薦了第一種方法,因此以下是自定義幫助程序的示例實現:

public static class HtmlExtensions
{
    public static IHtmlString MyBoldedActionLink(
        this HtmlHelper htmlHelper,
        string linkText,
        string actionName,
        string controllerName,
        object routeValues,
        object htmlAttributes
    )
    {
        var anchor = new TagBuilder("a");
        anchor.InnerHtml = string.Format("<b>{0}</b>", htmlHelper.Encode(linkText));
        var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
        anchor.Attributes["href"] = urlHelper.Action(actionName, controllerName, routeValues);
        anchor.MergeAttributes(new RouteValueDictionary(htmlAttributes));
        return new HtmlString(anchor.ToString());
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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