【发布时间】:2015-06-01 19:16:19
【问题描述】:
我有一个将当前控制器设置为活动导航栏项目的 Helper 类。它还考虑了下拉导航。
public static MvcHtmlString MenuItem(
this HtmlHelper htmlHelper,
string text,
string action,
string controller,
Dictionary<string, string> dropdown
)
{
var li = new TagBuilder("li");
var dropdownList = new TagBuilder("ul");
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.AddCssClass("menuitem");
if(dropdown != null)
{
li.AddCssClass("dropdown");
foreach (var item in dropdown)
{
var dropdownli = new TagBuilder("li");
dropdownli.InnerHtml = htmlHelper.ActionLink(item.Key, item.Key, item.Value, null, null).ToHtmlString();
dropdownList.InnerHtml += dropdownli;
}
dropdownList.AddCssClass("dropdown-menu");
li.InnerHtml = htmlHelper.ActionLink(text, action, controller, null, new { @class="dropdown-toggle", data_toggle="dropdown"}).ToHtmlString() + dropdownList.ToString();
}
else
{
li.InnerHtml = htmlHelper.ActionLink(text, action, controller).ToHtmlString();
}
return MvcHtmlString.Create(li.ToString());
}
Helper 类在 _Layout.cshtml 中调用如下:
@Html.MenuItem("Home", "Index", "Home", null)
@Html.MenuItem("News", "Index", "News", null)
@Html.MenuItem("Media", "Index", "Media",
new Dictionary<string, string>() {{ "Photos", "Media" },
{ "Videos", "Media" }})
@Html.MenuItem("Events", "Index", "Events",
new Dictionary<string, string>() {{ "FirstEvent", "Events" },
{ "SecondEvent", "Events" }})
@Html.MenuItem("Donate", "Index", "Donate",
new Dictionary<string, string>() {{ "Sponsor", "Donate" }})
问题是对于每个导航栏项目,每个链接的名称都是动作的名称,这意味着如果动作是“FirstEvent”,它将显示为“FirstEvent”而不是“First Event”。
我是否可以做类似 [ActionName("First Event")] 的操作来设置名称,然后在 Helper 类中调用它?
[ActionName("Culture Show")]
public ActionResult CultureShow()
{
return View();
}
【问题讨论】:
标签: c# asp.net-mvc razor