Tue, 11 August 2009
Sometimes its useful to be able target html elements on a particular page or you want to have specific styling according to a particular area, controller or action.
Here is a small extension to use route data to do just that.
namespace Antix.Web.Mvc {
public static class Extentions {
/// <summary>
/// <para>Get a string from the route data</para>
/// </summary>
public static string RouteString(
this ViewContext context, string template) {
foreach (var value in context.RouteData.Values) {
template = template.Replace(string.Format("{{{0}}}",
value.Key.ToLower()),
value.Value == null
? string.Empty
: value.Value.ToString().ToLower());
}
return template;
}
}
}
Making sure that the extension is in scope;
by importing on your page
<%@ Import Namespace="Antix.Web.Mvc"%>
or adding to you web.config
<configuration>
<system.web>
<pages>
<namespaces>
<add namespace="Antix.Web.Mvc"/>
</namespaces>
</pages>
</system.web>
<configuration>
Call the function to retrieve the route data in a particular format like so...
<body class="<%= ViewContext.RouteString("{controller}_{action}") %>">
I've used this in the master page of my site to identify a page Body tag by controller and action.
<blog class="home_blogentry">
ASP.NET MVC, Development, CSS
Antix Software Limited is registered in England and Wales.
Registered Number: 3491105 Registered Office: 100-103 Church St., Brighton, BN1 1UJ