この質問が何度も出されていることは承知していますが、私のシナリオは他のものと少し異なります。リンクが現在の場所へのリンクである場合、私が達成したいのはメニュー項目を強調表示することだけです。<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ヘルパーを使用しますが、私の場合、すべてのリンクは同じコントローラーとアクションをターゲットにしており、に基づいて互いに異なりますメソッドに渡すパラメーター。現在のメニュー項目を強調表示するにはどうすればよいでしょうか。
何かご意見は?