在 ASP.NET MVC MasterPage 视图中以编程方式应用样式

发布于 2024-10-04 17:02:35 字数 617 浏览 3 评论 0原文

在我的 MVC Web 应用程序中实现以下目标的最佳/最合适的方法是什么?

我有一个名为 Site.Master 的视图(这是我的 MasterPage 视图),在该视图的顶部,我有 5 个链接,它们充当我的主站点导航,例如

<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Links</a></li>
    <li><a href="">Contact Us</a></li>
    ...etc
</ul>

我想要的是能够突出显示适当的文本链接,根据用户当前正在查看网站的哪个部分,因此,如果他们使用“联系我们”页面,则母版页视图上的“联系我们”链接将应用不同的 css 样式。

在 Web 窗体中,我的每个链接都是一个 HyperLink 控件,并且我在 MasterPage 后面的代码中有一个属性,因此将相关的 CssStyle 分配给每个 HyperLink 控件。

现在我正在使用 MVC,在 MasterPage 视图中实现相同目标的最佳方法是什么?

What would be the best/most suitable way to achieve the following in my MVC web application ?

I have a view called Site.Master (it's my MasterPage view), and across the top of this view, I have 5 links, which act as my main site navigation e.g.

<ul>
    <li><a href="">Home</a></li>
    <li><a href="">Links</a></li>
    <li><a href="">Contact Us</a></li>
    ...etc
</ul>

What I want is to be able to highlight the appropriate text link, according to which part of the site the user is currently viewing, so if they were using the 'Contact Us' page, the Contact Us link on the master page view would have a different css style applied to it.

In Web Forms, each of my links was a HyperLink control, and I had a property in the code behind of the MasterPage so assign the relevant CssStyle to each HyperLink control.

What would be the best way to achieve the same thing in my MasterPage view, now I'm using MVC?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

总攻大人 2024-10-11 17:02:35

我可能会编写一个 html 帮助器,它将生成这些菜单链接,并根据当前控制器和操作将 css 类 current 应用于锚点:

public static MvcHtmlString MenuLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName
)
{
    string currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
    string currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
    if (actionName == currentAction && controllerName == currentController)
    {
        return htmlHelper.ActionLink(
            linkText,
            actionName,
            controllerName,
            null,
            new {
                @class = "current"
            });
    }
    return htmlHelper.ActionLink(linkText, actionName, controllerName);
}

然后在我的视图中使用这个帮助器:

<ul>
  <li><%= Html.MenuLink("Home", "Index", "Home") %></li>
  <li><%= Html.MenuLink("Links", "Links", "Home") %></li>
  <li><%= Html.MenuLink("Contact us", "Contact", "Home") %></li>
</ul> 

然后就是这样左边是在 CSS 文件中定义这个 current 类以突出显示:

.current {
    ...
}

I would probably write an html helper which will generate those menu links and based on the current controller and action will apply a css class current to the anchor:

public static MvcHtmlString MenuLink(
    this HtmlHelper htmlHelper, 
    string linkText, 
    string actionName, 
    string controllerName
)
{
    string currentAction = htmlHelper.ViewContext.RouteData.GetRequiredString("action");
    string currentController = htmlHelper.ViewContext.RouteData.GetRequiredString("controller");
    if (actionName == currentAction && controllerName == currentController)
    {
        return htmlHelper.ActionLink(
            linkText,
            actionName,
            controllerName,
            null,
            new {
                @class = "current"
            });
    }
    return htmlHelper.ActionLink(linkText, actionName, controllerName);
}

And then use this helper in my view:

<ul>
  <li><%= Html.MenuLink("Home", "Index", "Home") %></li>
  <li><%= Html.MenuLink("Links", "Links", "Home") %></li>
  <li><%= Html.MenuLink("Contact us", "Contact", "Home") %></li>
</ul> 

Then all that's left is to define this current class in a CSS file to highlight:

.current {
    ...
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文