我不确定这是否是简单的误解或不正确的范式来使用这种功能,但是这是我想出迄今...
我想当我们检测到用户与href在同一页面上时,提供一个通用的功能,添加一个css属性(在本例中为“active”)到一个定位标记。在MVC(特别是我的应用程序)的上下文中,我将其解释为“当前活动的控制器与超链接的目标位置相同”。
好吧!所以。我在哪里与代码?
我已经实现了下面的Html助手扩展,以帮助创建从我需要的标准链接稍微“调整”。
public static MvcHtmlString ActiveActionLink (this HtmlHelper helper, string labelText, string action, string controller)
{
var cssProprties = controller + " active";
return helper.ActionLink(labelText, action, controller, null, new { @class = cssProprties });
}
目前你可以看到我正在申请两个css类。首先是控制器的名称,这很好。后来,我没有逻辑,我只是添加活动的CSS类。这是我一直试图添加逻辑的。
我的理论是,我需要做的就是挖掘正确的对象,找到我目前在哪个控制器中,并将其匹配到传入的“控制器”参数。如果这些匹配,则添加活跃的班级。
所以,在两个问题...
这是在ASP.NET MVC “思考” 正确的/可接受的方式吗?
如果是这样的话:我可以从我所在的级别挖掘哪些对象,以便访问用于比较的信息 - 我需要哪些?
UPDATE:
后,当我写SO一个问题通常是什么发生了,我灵机一动。我注意到的代码在BeginForm帮助金块,导致我创造这个例子:
public static MvcHtmlString ActiveActionLink (this HtmlHelper helper, string labelText, string action, string controller)
{
var cssProprties = controller;
// if this controller is the target controller, page is active.
if (helper.ViewContext.RouteData.Values["controller"].ToString() == controller)
cssProprties += " active";
return helper.ActionLink(labelText, action, controller, null, new { @class = cssProprties });
}
所以我想这回答了“的对象,我可以挖通?”题。另外,因为这直接受到MVC源代码的影响 - 可能是“这是ASP.NET mvc中”思考“的正确/可接受的方式吗?”问题呢?
2010-09-22
Mike