Je dois déterminer si je suis sur une vue particulière. Mon cas d'utilisation est que je voudrais décorer les éléments de navigation avec une classe "on" pour la vue actuelle. Y a-t-il un moyen de le faire?Asp.Net MVC: Comment déterminer si vous êtes actuellement sur une vue spécifique
7
A
Répondre
6
Voici ce que j'utilise. Je pense que cela est en fait généré par le modèle de projet MVC dans 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
Ma solution actuelle est avec des méthodes d'extension:
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
Voici quelque chose d'un peu différent, utilisez 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 sd dans la vue:
<%= ViewData["NavigationLocation"] %>
Questions connexes
- 1. Comment utilisez-vous Machine.config, ou êtes-vous?
- 2. Quand n'utiliseriez-vous pas une vue ASP.NET MVC fortement typée?
- 3. Comment savoir si vous vous êtes connecté à une page Web Sharepoint?
- 4. Asp.Net MVC ActionLink spécifique Href
- 5. Comment activer une session uniquement dans une vue spécifique et la désactiver sur d'autres dans ASP.NET MVC
- 6. Comment déterminer si une URL asp.net a été "réécrite"?
- 7. Comment regrouper des données dans une vue ASP.NET MVC?
- 8. Comment annulez-vous User.Identity.Name dans ASP.NET MVC?
- 9. Comment utiliser une méthode d'extension dans une vue ASP.NET MVC?
- 10. Comment savoir si vous êtes dans une tâche rake ou non
- 11. L'interactivité où êtes-vous parti?
- 12. ASP.NET MVC retourner une vue différente
- 13. Détection si une chaîne particulière est actuellement visible sur TextField()
- 14. FQL lorsque vous êtes déconnecté
- 15. Vue maître-détail ASP.NET MVC
- 16. Vue ASP.NET MVC - frameworks alternatifs
- 17. Comment obtenez-vous la variable Profile rempli dans une vue dans ASP.NET MVC?
- 18. Comment obtenez-vous le profil d'adhésion d'un utilisateur dans une vue ASP.NET MVC?
- 19. Comment déterminer si un contrôle est activé sur une page?
- 20. Développement OpenId lorsque vous êtes déconnecté d'Internet
- 21. Comment ajouter du JavaScript à une vue ASP.NET MVC?
- 22. Comment déterminer si la chaîne contient une sous-chaîne spécifique dans les X premiers caractères
- 23. Comment écrivez-vous votre propre moteur de vue pour ASP.NET MVC?
- 24. Code de formatage spécifique à l'affichage dans ASP.net MVC
- 25. ASP.NET MVC: comment afficher une vue partielle sur toutes les vues sauf une?
- 26. Comment pouvez-vous déterminer dans quel Sharepoint WebPartZone vous êtes à partir d'un fichier XSL pour générer dynamiquement le style?
- 27. asp.net MVC vue partielle contrôleur action
- 28. Comment déterminer si une adresse IP appartient à un pays
- 29. ASP.NET MVC: Affichage des résultats sur différents même vue
- 30. Déterminer si un serveur auquel vous vous connectez est virtualisé?