Necesito determinar si estoy en una vista particular. Mi caso de uso es que me gustaría decorar elementos de navegación con una clase "activada" para la vista actual. ¿Hay una forma construida de hacer esto?Asp.Net MVC: cómo determinar si se encuentra actualmente en una vista específica
7
A
Respuesta
6
Aquí lo que estoy usando. Creo que esto es realmente generado por la plantilla de proyecto MVC en VS:
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;
}
2
Mi solución actual es con los métodos de extensión:
public static class UrlHelperExtensions
{
/// <summary>
/// Determines if the current view equals the specified action
/// </summary>
/// <typeparam name="TController">The type of the controller.</typeparam>
/// <param name="helper">Url Helper</param>
/// <param name="action">The action to check.</param>
/// <returns>
/// <c>true</c> if the specified action is the current view; otherwise, <c>false</c>.
/// </returns>
public static bool IsAction<TController>(this UrlHelper helper, LambdaExpression action) where TController : Controller
{
MethodCallExpression call = action.Body as MethodCallExpression;
if (call == null)
{
throw new ArgumentException("Expression must be a method call", "action");
}
return (call.Method.Name.Equals(helper.ViewContext.ViewName, StringComparison.OrdinalIgnoreCase) &&
typeof(TController) == helper.ViewContext.Controller.GetType());
}
/// <summary>
/// Determines if the current view equals the specified action
/// </summary>
/// <param name="helper">Url Helper</param>
/// <param name="actionName">Name of the action.</param>
/// <returns>
/// <c>true</c> if the specified action is the current view; otherwise, <c>false</c>.
/// </returns>
public static bool IsAction(this UrlHelper helper, string actionName)
{
if (String.IsNullOrEmpty(actionName))
{
throw new ArgumentException("Please specify the name of the action", "actionName");
}
string controllerName = helper.ViewContext.RouteData.GetRequiredString("controller");
return IsAction(helper, actionName, controllerName);
}
/// <summary>
/// Determines if the current view equals the specified action
/// </summary>
/// <param name="helper">Url Helper</param>
/// <param name="actionName">Name of the action.</param>
/// <param name="controllerName">Name of the controller.</param>
/// <returns>
/// <c>true</c> if the specified action is the current view; otherwise, <c>false</c>.
/// </returns>
public static bool IsAction(this UrlHelper helper, string actionName, string controllerName)
{
if (String.IsNullOrEmpty(actionName))
{
throw new ArgumentException("Please specify the name of the action", "actionName");
}
if (String.IsNullOrEmpty(controllerName))
{
throw new ArgumentException("Please specify the name of the controller", "controllerName");
}
if (!controllerName.EndsWith("Controller", StringComparison.OrdinalIgnoreCase))
{
controllerName = controllerName + "Controller";
}
bool isOnView = helper.ViewContext.ViewName.SafeEquals(actionName, StringComparison.OrdinalIgnoreCase);
return isOnView && helper.ViewContext.Controller.GetType().Name.Equals(controllerName, StringComparison.OrdinalIgnoreCase);
}
}
1
Aquí hay algo un poco diferente, utilice un FilterAttribute:
[NavigationLocationFilter("Products")]
public ViewResult List()
{
return View();
}
...
public class NavigationLocationFilterAttribute : ActionFilterAttribute
{
public string CurrentLocation { get; set; }
public NavigationLocationFilterAttribute(string currentLocation)
{
CurrentLocation = currentLocation;
}
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var controller = (Controller)filterContext.Controller;
controller.ViewData.Add("NavigationLocation", CurrentLocation);
}
}
...
A nd en la vista:
<%= ViewData["NavigationLocation"] %>
Cuestiones relacionadas
- 1. Cómo determinar si una aplicación web se está ejecutando actualmente
- 2. ¿Existe una vista en Asp.Net MVC?
- 3. ¿Cómo comprobar si una vista específica de UIViewController está actualmente visible?
- 4. ¿Cómo determinar si la vista es para GET o POST en ASP.NET MVC?
- 5. Cómo determinar si una cadena contiene una subcadena específica
- 6. ¿Cómo saber si actualmente se encuentra en la última fila de una tabla HTML?
- 7. determine si el punto en la pantalla se encuentra dentro de la subvista UIScrollView específica
- 8. Recursividad en una vista ASP.NET MVC
- 9. ¿Puede jQuery determinar qué divs se encuentran actualmente en la vista del navegador del usuario?
- 10. ¿Cómo determinar si una vista es visible en un ListView?
- 11. jQuery si se encuentra en la cadena
- 12. ¿Cómo puedo determinar si una fecha se encuentra entre dos fechas en Java?
- 13. Determinar si una clase implementa una interfaz muy específica
- 14. ASP.Net MVC redirigir a una vista diferente
- 15. ¿Jquery encuentra si la página contiene una identificación específica?
- 16. ¿Cómo puedo agrupar los datos en una vista ASP.NET MVC?
- 17. Modelos específicos de vista en ASP.NET MVC?
- 18. ASP.NET MVC devuelve una vista diferente
- 19. ASP.NET MVC Intellisense no encuentra ViewData
- 20. Determinar si una celda de vista de tabla está visible
- 21. Una forma rápida de determinar si se encuentra un Componet en JPanel
- 22. ¿Cómo puedo determinar si se visualiza un punto geográfico en el área actualmente visible?
- 23. La mejor manera de determinar si una secuencia se encuentra en otra secuencia en Python
- 24. Actualizar periódicamente una vista parcial (ASP.Net MVC)
- 25. ASP.Net MVC cómo determinar si un usuario puede acceder a una URL?
- 26. Mostrar/Ocultar enlaces en una vista ASP.Net MVC
- 27. ¿Cómo se borra User.Identity.Name en ASP.NET MVC?
- 28. Agregar una referencia a una vista en ASP.NET MVC
- 29. Redirigir asp.net mvc si se produce una excepción personalizada
- 30. ASP.NET MVC - ¿Cómo pasar una matriz a la vista?