【问题标题】:ASP.NET mvc 3 razor : Html Helper Extension Method - executed but dosen't print htmlASP.NET mvc 3 razor:Html Helper Extension Method - 执行但不打印 html
【发布时间】:2011-09-25 14:53:50
【问题描述】:

您好,我在 razor 视图引擎中的 html 帮助程序扩展方法有问题。如果我有要打印的节点,我想渲染 SideMenu:

<!DOCTYPE html>
<html>
<head>
    <title>@ViewBag.Title</title>
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
    <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
</head>
@using MyNamespace.Helpers
<body>
    <div id = "page" style = "width: 90%; margin: 0 auto" class="pageSection">
        <div id="logo" class="pageSection">aaaa</div>
        <div id = "LeftMenuContainer">
        @{ if (ViewBag.Menu.LeftMenu.Count > 0)
           {
               Html.RenderSideMenu((ICollection<MyNamespace.MenuNode>)(ViewBag.Menu.LeftMenu));
           }
         }
         </div>
        <div id="content" class="pageSection">@RenderBody()</div>
        <div id="footer" class="pageSection"></div>
    </div>
</body>
</html>

这是我的方法:

public static MvcHtmlString RenderSideMenu(this HtmlHelper helper, ICollection<MenuNode> nodes)
{
    string result = "<h3>Menu</h3>";
    result += "<ul class=\"SideMenu\">";
    foreach (var node in nodes)
        result += MenuRenderEngine.RenderNode(node);
    result += "</ul>";
    return MvcHtmlString.Create(result);
}

问题是该方法被执行并返回准备好的字符串,但没有在视图中打印它,所以我很困惑我做错了什么?

【问题讨论】:

    标签: asp.net-mvc-3 razor


    【解决方案1】:

    如果要在页面上输出结果,请使用@

    <div id = "LeftMenuContainer">
        @if (ViewBag.Menu.LeftMenu.Count > 0)
        {
            @Html.RenderSideMenu((ICollection<MyNamespace.MenuNode>)(ViewBag.Menu.LeftMenu));
        }
    </div>
    

    另外,作为旁注,不要使用ViewBag,而是使用视图模型。

    【讨论】:

    • hm,所以即使每次都显示这个菜单我应该准备viewModel?或为 ex 制作一些通用类。 viewModel 将有菜单数据?
    • @trn,是的,您应该始终使用视图模型。现在因为这是关于一些菜单或应该在每个视图上重复的内容,您可能有兴趣将其放入站点的 _layout 并使用 Html.Action 以便通过子控制器操作呈现它,该操作将有一个单独的主要动作的执行和视图模型。我建议您阅读 Phil Haak 的博文:haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx。每次你在 ASP.NET MVC 应用程序中写 ViewBag/ViewData 时都对自己说你做错了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-14
    • 2012-11-16
    • 2012-06-27
    • 2014-12-09
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多