2010-11-26 4 views
3

Ce même code fonctionne bien avec MVC 2 mais ne fonctionne pas dans MVC 3 Razor. Une fois la page chargée, le menu de chargement de HTMLHelper n'est pas chargé dans Razor comme ci-dessous.Sortie rasoir ne fonctionnant pas dans MVC 3 mais travaillant dans MVC 2

Menu codé en dur pour les tests qui ne sont pas sortis sur la page.

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

} 

Ci-dessous le code Razor CSHTML.

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

Répondre

5

Code d'emballage dans @{ ... } (comme vous l'avez fait) est l'équivalent de rasoir à <% ... %> (sans =). Par conséquent, votre code appelle la fonction, mais ne fait rien avec le résultat.

Vous devez supprimer le {} et le ; et écrire simplement @Html.TabbedMenu(...); ceci est équivalent à <%: Html.TabbedMenu(...) %>.

Vous devrez également modifier la méthode pour renvoyer un HtmlString pour empêcher Razor d'échapper au code HTML.

+0

Ok changé cela comme ci-dessous statique HtmlString TabbedMenu publique (cette aide HtmlHelper, IEnumerable onglets) { \t nouvelle HtmlString retour ("MENU HTML ICI CI-DESSUS"); } @ Html.TabbedMenu ( \t nouvelle liste \t { \t \t MenuTab.Create ("Home", "Index", "Home"), \t} ) erreur est inférieure La méthode la mieux surchargée pour 'System.Web.WebPages.WebPageExecutingBase.Write (System.Web.WebPages.HelperResult)' a des arguments non valides ne peut pas convertir de 'groupe de méthodes' en 'System.Web.WebPages.HelperResult' \t c : \ Path myproject – Pirzada

+1

@user: Supprime les espaces avant le premier '(' ou encapsule tout l'appel: '@ (Html.TabbedMenu (...))' L'analyseur Razor voit cet espace et arrête l'analyse. (Il pense que vous utilisez une propriété) – SLaks

+0

Merci beaucoup. Ça a marché. – Pirzada

Questions connexes