Выход бритвы не работает в MVC 3, но работает в MVC 2 - PullRequest
3 голосов
/ 26 ноября 2010

Этот же код прекрасно работает с MVC 2, но не работает в MVC 3 Razor.После загрузки страницы не загружается меню из HTMLHelper, вызываемое в Razor, как показано ниже.

Жестко запрограммированное меню для тестирования, которое не выводится на страницу.

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 Ответ

5 голосов
/ 26 ноября 2010

Код переноса в @{ ... } (как вы это сделали) эквивалентен Razor <% ... %> (без =).

Следовательно, ваш код вызывает функцию, но ничего не делает с результатом.

Вы должны удалить {} и ; и просто написать @Html.TabbedMenu(...); это эквивалентно <%: Html.TabbedMenu(...) %>.

Вам также потребуется изменить метод, чтобы он возвращал HtmlString, чтобы Razor не выходил из HTML.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...