代码之家  ›  专栏  ›  技术社区  ›  AngryHacker

如何在ASP.NET MVC中替换母版页中的标记?

  •  1
  • AngryHacker  · 技术社区  · 14 年前

    我的ASP.NET MVC项目中有一个母版页,其代码如下:

        <div id="menu">
            <ul>
                <li><a href="#" class="current">home</a></li>
                <li><a href="#">add image</a></li>
                <li><a href="#">contact</a></li>
            </ul>
        </div>
    

    根据我所在的页面,我想移动 class="current" 属性到另一个 <li> .

    这种类型的事情在ASP.NET MVC上用的一般模式是什么?

    2 回复  |  直到 14 年前
        1
  •  1
  •   tvanfosson    14 年前

    在服务器端,您可以使用一个baseviewmodel,该模型包含关于哪个链接应该具有当前类的信息。所有视图模型都将从此基类继承,而masterpage将被强类型化为baseviewModel。然后,您可以使用模型来设置链接。

    客户端您可以应用一个唯一标识每个链接并将其与特定URL关联的特定ID或类。在页面加载时,可以使用jquery(或其他)根据应用程序的映射逻辑将类添加到匹配的链接中。

    我更喜欢前者,因为即使javascript不可用,它也可以工作。

     public class BaseViewModel
     {
          public string CurrentLink { get; set; }
          ...
     }
    

    视图逻辑

     <div id="menu">
        <ul>
            <li><a href="#" class="<%= Model.CurrentLink == "home" ? "current" : "" %>">home</a></li>
            <li><a href="#" class="<%= Model.CurrentLink == "addimage" ? "current" : "" %>">add image</a></li>
            <li><a href="#" class="<%= Model.CurrentLink == "contact" ? "current" : "" %>">contact</a></li>
        </ul>
    </div>
    

    此外,我可能会组合一个HTML助手来为我生成菜单项。本质上,使用TagBuilder构建锚并在与htmlhelper关联的viewContext上使用模型应用类。把这个包起来 li 并将其作为字符串返回。使页面逻辑更清晰,如果链接与控制器/操作相关联,则可以从视图上下文中使用该信息并选择应为当前链接的链接。

        2
  •  1
  •   John Farrell    14 年前
    if( HttpContext.Current.Request.Url == "my link string" )
        //add your current attribute
    

    在这种情况下,MVC没有添加任何特殊的调味汁。