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

时间:2010-11-26 18:46:20

标签: 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>";
    }

}

以下是Razor CSHTML代码。

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

1 个答案:

答案 0 :(得分:5)

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

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

您应该删除{};,然后只需撰写@Html.TabbedMenu(...);这相当于<%: Html.TabbedMenu(...) %>

您还需要更改方法以返回HtmlString,以防止Razor转义HTML。