【问题标题】:RAZOR Syntax building a menuRAZOR 语法构建菜单
【发布时间】:2013-07-25 19:49:27
【问题描述】:

我是第一次使用 MVC4 和 Razor: 我正在尝试动态构建菜单:

 @foreach (var menu in Model.Menu)
 {
<li>
 Html.ActionLink("@menu.Name", "@menu.View", "@menu.Controller");
</li>
}

Menu 类有效,但输出不是文字,而是字符串:

Html.ActionLink("首页", "索引", "首页"); Html.ActionLink("Menu1", “索引”,“菜单1”); Html.ActionLink("Menu2", "Index", "Menu2");

我需要改变什么来输出实际的文字?

编辑:我以此为基础:

<li>@Html.ActionLink("Menu1", "Index", "Menu1")</li>

菜单类:

 public class MenuItem
    {
        public string Name { get; set; }
        public bool isActive { get; set; }
        public string Controller { get; set; }
        public string View { get; set; }
    }

【问题讨论】:

    标签: asp.net-mvc-4 razor


    【解决方案1】:

    试试这个,因为你在Html.ActionLink之前没有设置@,它把它当作文本来处理

    @foreach (var menu in Model.Menu)
    {
        <li>
            @Html.ActionLink((string)menu.Name, (string)menu.View, (string)menu.Controller)
        </li>
    }
    

    编辑:只需将其转换为 string 或者您可以尝试

    @LinkExtensions.ActionLink(Html, menu.Name, menu.View, menu.Controller)
    

    【讨论】:

    • 使用您的示例我得到了这个:CS1973: 'System.Web.Mvc.HtmlHelper' has no applicable method named 'ActionLink'
    • @callisto,我已经调整了答案,请发布Menu class
    【解决方案2】:

    你需要在Html.ActionLink之前添加@符号并且去掉末尾的分号:

    @foreach (var menu in Model.Menu)
    {
        <li>
            @Html.ActionLink(menu.Name, menu.View, menu.Controller)
        </li>
    }
    

    【讨论】:

    • 收到此错误:CS1973: 'System.Web.Mvc.HtmlHelper' 没有名为 'ActionLink' 的适用方法
    • 您也不需要菜单变量前面的@ 符号
    • 我假设您的所有菜单项都有NameViewController属性的值...
    • 我正在使用正确的值填充列表:
    • @Html.ActionLink("Home", "Index", "Home")
    • @Html.ActionLink( "Menu1", "Index", "Menu1")
    • @Html.ActionLink("Menu2", "Index", "Menu2")
    • 有效
  • 在这种情况下,我会倒退。用静态文本替换您的变量,即@Html.ActionLink("Text", "Index", "Home")。如果运行正确,那么它必须是您的属性值。如果它仍然不起作用,您可能对 MVC 安装有更深层次的问题。附言不需要强制转换。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签