2010-11-26 8 views
3

Dieser Code funktioniert gut mit MVC 2, funktioniert aber nicht in MVC 3 Razor. Sobald die Seite geladen ist, wird kein Menü von HTMLHelper geladen, das in Razor wie folgt aufgerufen wird.Razor-Ausgang funktioniert nicht in MVC 3, funktioniert aber in MVC 2

Hartcodiertes Menü zum Testen, das nicht auf der Seite ausgegeben wird.

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>"; 
    } 

} 

Unten ist Razor CSHTML-Code.

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

Antwort

5

Wrapping Code in @{ ... } (wie Sie haben) entspricht Rasiermesser zu <% ... %> (ohne =).

Daher ruft der Code die Funktion auf, führt jedoch nichts zum Ergebnis.

Sie sollten die {} und die ; entfernen und einfach schreiben; Dies entspricht <%: Html.TabbedMenu(...) %>.

Sie müssen auch die Methode ändern, um eine HtmlString zurückzugeben, um zu verhindern, dass Razor den HTML-Code entzieht.

+0

Ok änderte sich dies, wie unten public static HtmlString TabbedMenu (dieser Htmlhelper Helfer, IEnumerable Tabs) { \t Rückkehr neue HtmlString ("HTML MENU HIER WIE OBEN"); } @ Html.TabbedMenu ( \t neue Liste \t { \t \t MenuTab.Create ("Home", "Index", "Home"), \t} ) Fehler ist unter Die beste überladene Methodenübereinstimmung für 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)' hat einige ungültige Argumente. kann nicht von 'Methodengruppe' in 'System.Web.WebPages.HelperResult' konvertieren \t c : \ Pfad myproject – Pirzada

+1

@user: Entfernen Sie den Leerraum vor dem ersten '(' oder wickeln Sie den gesamten Aufruf: '@ (Html.TabbedMenu (...))' Der Razor Parser sieht diesen Whitespace und stoppt die Analyse. (es denkt, Sie verwenden eine Eigenschaft) – SLaks

+0

Vielen Dank. Es funktionierte. – Pirzada

Verwandte Themen