2011-10-21 9 views
1

私はMVCを初めて使い、~/Destinations/35のようなリンクを追加したいと思っています。ここでは、それは宛先コントローラのインデックスビューを参照し、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. 書き込みテキストをHTMLエンコードしないで、このように使用するカスタムActionLinkヘルパー:

    @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これは基本的なものです –

+0

@ダリン:ありがとう!しかし、 '@ Html.ActionLink(d.Title、" Details "、" Destinations "、new {id =" 35 "}、null)'の行は、拡張メソッドについて私の質問で引用したのと同じエラーを動的に送出することはできません。私はここで何かを乱したことがありますか? –

+0

文字列として動的値 'd.Title'を型キャストしてエラーを解決できますか? –

関連する問題