gpt4 book ai didi

c# - 在 MVC 3 Razor 中获取事件页面链接的更好方法

转载 作者:IT王子 更新时间:2023-10-29 03:47:43 26 4
gpt4 key购买 nike

当我希望特定菜单链接在给定页面上处于事件状态时,我在 Razor 中使用了这种方法:

在主布局上我有这些检查:

var active = ViewBag.Active;
const string ACTIVE_CLASS = "current";

if (active == "home")
{
ViewBag.ActiveHome = ACTIVE_CLASS;
}
if (active == "products")
{
ViewBag.ActiveProducts = ACTIVE_CLASS;
}

等等

主布局上的 html 菜单:

<ul>
<li class="@ViewBag.ActiveHome"><a href="/">Home</a></li>
<li class="@ViewBag.ActiveProducts"><a href="@Url.Action("index", "products")">Products</a></li>
</ul>

指定在不同 View 上使用哪个布局页面时:

@{
ViewBag.Active = "home";
Layout = "~/Views/Shared/_Layout.cshtml";
}

有没有比我目前使用的方法更好的方法来分离事件链接?

最佳答案

更好的方法是使用 HTML 帮助器:

using System.Web.Mvc; 
using System.Web.Mvc.Html;

public static class MenuExtensions
{
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string text,
string action,
string controller
)
{
var li = new TagBuilder("li");
var routeData = htmlHelper.ViewContext.RouteData;
var currentAction = routeData.GetRequiredString("action");
var currentController = routeData.GetRequiredString("controller");
if (string.Equals(currentAction, action, StringComparison.OrdinalIgnoreCase) &&
string.Equals(currentController, controller, StringComparison.OrdinalIgnoreCase))
{
li.AddCssClass("active");
}
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
return MvcHtmlString.Create(li.ToString());
}
}

然后:

<ul>
@Html.MenuItem("Home", "Home", "Home")
@Html.MenuItem("Products", "Index", "Products")
</ul>

要完成上述工作,您需要您的 View 来识别您的扩展:在 Web.config 的 Views 文件夹中,添加 <add namespace="yourNamespacehere.Helpers" />在命名空间标签内。然后构建您的项目并关闭并重新打开您要将其添加到的 View 。

然后根据当前的操作和 Controller ,助手将添加或不添加 active生成 anchor 时的类。

关于c# - 在 MVC 3 Razor 中获取事件页面链接的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6323021/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com