Razor输出不在MVC 3中工作但在MVC 2中工作

Pir*_*ada 3 razor

这个相同的代码适用于MVC 2但不适用于MVC 3 Razor.加载页面后,如下面的Razor中调用的HTMLHelper加载菜单.

用于测试的硬编码菜单,不在页面上输出.

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

}
Run Code Online (Sandbox Code Playgroud)

下面是Razor CSHTML代码.

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

SLa*_*aks 5

包装代码@{ ... }(与你一样)是Razor相当于<% ... %>(没有=).

因此,您的代码会调用该函数,但不会对结果执行任何操作.

您应该删除{};和简单的写@Html.TabbedMenu(...); 这相当于<%: Html.TabbedMenu(...) %>.

您还需要更改方法以返回一个HtmlString以防止Razor转义HTML.