如何在asp.net mvc的母版页中替换标记?

时间:2010-03-21 01:40:34

标签: c# asp.net-mvc visual-studio-2008 .net-3.5

我的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 个答案:

答案 0 :(得分:1)

if( HttpContext.Current.Request.Url == "my link string" )
    //add your current attribute

MVC没有任何特殊的酱汁添加到这种情况。

答案 1 :(得分:1)

服务器端,您可以使用BaseViewModel,其中包含有关哪个链接应具有当前类的信息。所有视图模型都将从此基类继承,并且MasterPage将强类型化为BaseViewModel。然后,您可以使用该模型来设置链接。

客户端您可以应用唯一标识每个链接并将其与特定网址相关联的特定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中并将其作为字符串返回。使页面逻辑更清晰,如果您的链接与控制器/操作相关联,您也可以使用ViewContext中的信息来选择当前链接。