2010-11-26 13 views
3

この同じコードはMVC 2では正常ですが、MVC 3 Razorでは機能しません。ページが読み込まれると、以下のようにRazor内で呼び出されるHTMLHelperからメニューが読み込まれません。MVC 3ではレイザー出力が機能しませんが、MVC 2で動作します

ページに出力されないテスト用のハードコーディングされたメニュー。

using System.Collections.Generic; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 
using myproject.Extensions; 

public static class MenuHelper 
{ 

    public static string TabbedMenu(this HtmlHelper helper, IEnumerable<MenuTab> tabs) 
    { 
     //I have hard coded menu for testing purpose. 

     return "<div class='menu-image'><img src='/content/Images/common/on-left.gif' alt='' /></div><div class='on'><a class='over' href='/?Length=4'>Home</a></div><div class='menu-image'><img src='/content/Images/common/on-right.gif' alt='' /></div><a href='/Home/About'>About</a><a href='/Home/Contact'>Contact</a>"; 
    } 

} 

以下はRazor CSHTMLコードです。 @{ ... }

@{Html.TabbedMenu 
         (
          new List<MenuTab> 
          { 
           MenuTab.Create("Home", "Index", "Home"), 
           MenuTab.Create("About", "About", "Home"), 
           MenuTab.Create("Contact", "Contact", "Home") 
          } 
         );} 

答えて

5

ラッピングコードは(あなたが行ったように)(=なし)<% ... %>にカミソリのと等価です。

したがって、コードは関数を呼び出しますが、結果は何も行いません。

{};を削除して、単に@Html.TabbedMenu(...)と書いてください。これは<%: Html.TabbedMenu(...) %>に相当します。

また、RazorがHTMLをエスケープしないように、HtmlStringを返すようにメソッドを変更する必要があります。

+0

OK]をクリックして のpublic static HtmlString TabbedMenu(このHtmlHelperのヘルパー、IEnumerableをタブ) { \tリターン新しいHtmlString( "HERE HTMLメニューとしてABOVE")以下のようにこれを変更し、 Html.TabbedMenu @ } ( \t新しいリスト \t { \t \t MenuTab.Create( "ホーム"、 "インデックス"、 "ホーム")、 \t} ) エラーが を下回っています'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'に最適なオーバーロードされたメソッドが一致しません。 'メソッドグループ'から 'System.Web.WebPages.HelperResult'に変換できません。\t c :\ Path myproject – Pirzada

+1

@user:最初の '('の前に空白を削除するか '@(Html.TabbedMenu(...))' Razorパーサーはその空白を見て解析を停止します。 (それはあなたが財産を使っていると思う) – SLaks

+0

ありがとう。出来た。 – Pirzada

関連する問題