0

我知道这个问题已经被问过很多次了,但我的情况与其他情况几乎没有什么不同。如果链接是指向当前位置的链接,我想要实现的只是突出显示菜单项。通过突出显示我的意思是我想将一个名为 current 的类附加到<li>包含链接的内容中。菜单位于主页面中,我通过从 Home Controller 的 Index 操作方法传递菜单项列表来动态填充该页面。

索引操作(主控制器)

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);

    }

在 layout.cshtml 我使用 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 }
            );

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

有什么想法吗?

4

1 回答 1

1

您可以在 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>
}

这是您实际方法的最快方法,但我认为值得制作一个视图模型类来保存具有必要信息的菜单项以绘制整个菜单,这样您就可以保持视图的清洁。

于 2013-04-16T09:00:16.413 回答