0

この質問が何度も出されていることは承知していますが、私のシナリオは他のものと少し異なります。リンクが現在の場所へのリンクである場合、私が達成したいのはメニュー項目を強調表示することだけです。<li>強調表示するということは、 current という名前のクラスをリンクを含むにアタッチしたいということです。メニューは、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 }
            );

現在のメニュー項目の強調表示に関してWebで見た他のすべてのソリューションは、コントローラーとアクションに基づいて決定を行うHTMLヘルパーを使用しますが、私の場合、すべてのリンクは同じコントローラーとアクションをターゲットにしており、に基づいて互いに異なりますメソッドに渡すパラメーター。現在のメニュー項目を強調表示するにはどうすればよいでしょうか。

何かご意見は?

4

1 に答える 1

1

ビューバッグで実際の都市名を渡すことができます。

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 に答える