Google Analytics Razor Helper

May 19, 2011 - net mvc razor

I experimented today with the Razor helper syntax to consolidate generation of the Google Analytics tracking boilerplate (in ~/App_Code/Helpers.cshtml):

@helper GoogleAnalyticsTracker(string analyticsId) { 
  if (!String.IsNullOrEmpty(analyticsId)) { 
    <script type="text/javascript"> var _gaq = _gaq || []; 
      _gaq.push(['_setAccount', '@analyticsId']);
      _gaq.push(['_trackPageview']);

      (function () { 
        var ga = document.createElement('script'); 
        ga.type = 'text/javascript'; 
        ga.async = true; 
        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; 
        var s = document.getElementsByTagName('script')[0]; 
        s.parentNode.insertBefore(ga, s); 
      })();
    </script> 
  } 
}

which can then be used in your layout pages with:

@Helpers.GoogleAnalyticsTracker(Model.GoogleAnalyticsId)

It's a bit unclear where this mechanism should fit between custom HtmlHelper extension methods and Razor partial views. I guess you'd be looking for functionality that's less generic than an HtmlHelper extension - you can modify without recompiling, and it's less simple to share between projects - and smaller/more generic than a partial.

The App_Code requirement for sharing between pages is not ideal, particularly as HtmlHelper extension methods aren't available without workarounds. Hopefully the team get an update out in a reasonably timeframe.