ASP.. NET MVC活动菜单项,所有项都针对相同的操作

本文关键字:操作 MVC NET 活动 菜单项 ASP | 更新日期: 2023-09-27 18:09:29

我知道这个问题已经被问过很多次了,但我的情况与其他情况略有不同。如果链接是指向当前位置的链接,我想要实现的就是突出显示菜单项。通过突出显示,我的意思是我想将一个名为current的类附加到包含链接的<li>。菜单是在母版页,我正在动态填充通过从Home控制器的索引操作方法传递菜单项列表。

索引操作(Home Controller)

public ActionResult Index(string city, string adtype)
    {
        if (city == null)
        {
            city = "abc";
        }
        if (adtype == null)
        {
            adtype = "jobs";
        }

        using (var _db = new UPContext())
        {
            var cities = _db.Cities.ToList();
            ViewBag.cities = cities;
        }
        var model = new List<AdPost>();
        using (var _db = new UPContext())
        {
            var cat = _db.AdTypes.Where(a => a.AdTypeName == adtype).SingleOrDefault();
            var adcity = _db.Cities.Where(c => c.CityName == city).SingleOrDefault();
            if ((cat != null) && (city != null))
            {
                model = (from p in _db.Posts
                         where p.City.Id == adcity.Id &&
                         p.AdType.Id == cat.Id
                         select p).ToList();
            }
            ViewBag.adType = adtype;
            ViewBag.City = city;
        }
        return View(model);
    }

在布局。我正在使用ViewBag.cities

填充菜单
@foreach (var c in ViewBag.cities)
    {
    <li> @Html.ActionLink((string)c.CityName, "Index","Home", new { city = c.CityName, adType="adtype" }, new { @class = "leftnav", data_id= c.Id })</li>
    }

我已经将路由配置为

 routes.MapRoute(
            name: "CityRoute",
            url: "{city}/{adtype}/",
            defaults: new { controller = "Home", action = "Index", city = UrlParameter.Optional, adtype=UrlParameter.Optional }
            );

我在web上看到的关于突出显示当前菜单项的所有其他解决方案都使用HTML helper,它根据控制器和操作做出决定,但由于在我的情况下,所有链接都针对相同的控制器和操作,并且基于它们传递给方法的参数彼此不同。我想知道如何突出显示当前菜单项。

任何想法吗?

ASP.. NET MVC活动菜单项,所有项都针对相同的操作

您可以在viewbag中传递实际的城市名称:

ViewBag.currentCity = city;

在foreach中查看当前城市:

@foreach (var c in ViewBag.cities)
{
    string cssClass = "leftnav";
    if(c.CityName == ViewBag.currentCity)
    {
        cssClass = "especialCurrentCityClass";
    }
    <li> @Html.ActionLink((string)c.CityName, "Index","Home", new { city = c.CityName,adType="adtype" }, new { @class = cssClass, data_id= c.Id })</li>
}

对于你的实际方法来说,这是最快的方法,但我认为值得做一个视图模型类来保存菜单项和绘制整个菜单所需的信息,这样你就可以保持视图的整洁。