2011-10-21 21 views
1

我是MVC的新手,想添加一個鏈接到類似~/Destinations/35的地方,它指的是Destinations控制器的Index視圖,35是要顯示的目的地的ID。在ActionLink()或RouteLink()中提供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'的適用方法,但似乎有一個按該名稱的擴展方法。擴展方法不能動態分派。考慮轉換動態參數或調用擴展方法而不使用擴展方法語法。

有人可以幫我創建這個鏈接嗎?

回答

5

您的代碼的第一個問題是您嘗試在鏈接文本(<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()); 
    } 
} 
+0

+1我也建議通過對一些教程會asp.net/mvc,因爲這是基本的東西 – 2011-10-21 16:14:57

+0

@Darin:謝謝!但是,在我的問題中,引用了@@ Html.ActionLink(d.Title,「Details」,「Destinations」,new {id =「35」},null)'仍然給出了同樣的錯誤,關於擴展方法不能動態調度。我在這裏搞砸了什麼? –

+0

看來我可以通過將動態值'd.Title'字符串轉換爲字符串來解決錯誤。 –