我在以下几个视图中复制了以下导航html /代码:
<ul class="topNav">
<li class="selected">@Html.ActionLink("Dashboard", "Dashboard", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
<li>@Html.ActionLink("Stats", "Stats", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
<li>@Html.ActionLink("Questions", "Questions", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
<li>@Html.ActionLink("Answers", "Answers", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
<li>@Html.ActionLink("Contacts", "Contacts", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
</ul>
当然,在每个视图中class="selected"
的{{1}}都已更改。有没有一种简单的方法可以将这段代码放在局部视图或布局视图中?
另外,我真的必须使用li
来获取控制器的ViewContext.RouteData.GetRequiredString("id")
参数,还是有更简单的方法?
答案 0 :(得分:1)
以下是两种处理方式。
如果你想要一个真正可重用(Application independ解决方案),你应该创建一个HtmlHelper方法 Creating Custom HTML Helpers
如果您在应用程序中需要它,请考虑做类似的事情。
public static class ControllerHelper
{
/// <summary>
/// Checks the current action via RouteData
/// </summary>
/// <param name="helper">The HtmlHelper object to extend</param>
/// <param name="actionName">The Action</param>
/// <param name="controllerName">The Controller</param>
/// <returns>Boolean</returns>
public static bool IsCurrentAction(this HtmlHelper helper, string actionName, string controllerName)
{
string currentControllerName = (string)helper.ViewContext.RouteData.Values["controller"];
string currentActionName = (string)helper.ViewContext.RouteData.Values["action"];
if (currentControllerName.Equals(controllerName, StringComparison.CurrentCultureIgnoreCase) && currentActionName.Equals(actionName, StringComparison.CurrentCultureIgnoreCase))
return true;
return false;
}
}
<ul class="topNav">
<li @if(Html.IsCurrentAction("DashBoard", "DashBoard")) { <text>class="selected"</text> }>@Html.ActionLink("Dashboard", "Dashboard", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
<li>@if(Html.IsCurrentAction("Stats", "Stats")) { <text>class="selected"</text> }>@Html.ActionLink("Stats", "Stats", new { id = ViewContext.RouteData.GetRequiredString("id") })</li>
// ....
</ul>
请告诉我,如果您想实施第一种方法,我会提供更多帮助
希望这会有所帮助
答案 1 :(得分:0)
您可以在App_code文件夹中创建静态帮助器方法。 请查看Reusing @helpers across multiple views
的部分您可以接受一个参数来定义哪个LI应该具有所选的类。