iloire/ASP.NET-MVC-ACME-Invoicing--App — Issue #3: helper para menu
Author: jesusgarza
Created: 2012-01-11 18:40:54+00:00
State: open

Iván,

Estoy comenzando a usar tu proyecto Invoicing-App y me está ayudando mucho. Aprovecho para hacerte una sugerencia para Menu.cshtml: condicionar la clase “active” usando un helper. Para eso se puede sacar cuál es el controlador y acción actual y pasarlo como parámetro:

Definir al inicio de Menu.cshtml una variable con el controlador-acción actual:

```javascript
@{
string currentControllerAction =
ViewContext.Controller.ValueProvider.GetValue("controller").RawValue.ToString() + "/" +
ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString();
}
```
Y en el menú, condicionar la clase usando el helper:

```html

@Html.ActionLink("Invoices", "Index", "Invoice", new { proposal = false }, null)

```

El helper sería algo sencillo:

```javascript
public static class MenuHelper
{
public const string ACTIVE_MENU_CSS_CLASS = "active";
public const string INACTIVE_MENU_CSS_CLASS = "inactive";

public static string GetCssClassForMenu(string currentControllerAction, string menuControllerAction)
{
if (currentControllerAction == menuControllerAction)
return ACTIVE_MENU_CSS_CLASS;
else
return INACTIVE_MENU_CSS_CLASS;
}
}
```

Referencias:
http://blog.janjonas.net/2011-02-15/aspnet-mvc_3-get-controller-action-razor-view
http://www.arrangeactassert.com/asp-net-mvc-view-best-practices-keep-logic-out-of-your-views/