The ASP.NET MVC controller action methods are primarily used for handling 'business' operations but it can be used for lots more.

I thought it would be fun to see what creative, useful things people have created actions for that may be practical or useful for others.

Here's my contribution :

**Javascript file concatenator - to [reduce number of http requests:](http://developer.yahoo.com/performance/rules.html#num_http)**

```
    [OutputCache(Duration = 5 * 60, VaryByParam="")]  // DONT USE "None" here *
    public ContentResult RenderJavascript(){

        StringBuilder js = new StringBuilder();
        StringWriter sw = new StringWriter(js);

        // load all my javascript files
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.hoverIntent.minified.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/jquery.corner.js")));
        js.AppendLine(File.ReadAllText(Request.MapPath("~/Scripts/rollingrazor.js")));

        return new ContentResult()
        {
            Content = js.ToString(),
            ContentType = "application/x-javascript"
        };
    }

```

Map a route to it :

```
  // javascript
  routes.MapRoute(
     "js-route",
     "dynamic/js",
     new { controller = "Application", action = "RenderJavascript" }
  );

```

Refer to it from your master page :

```
    <script type="text/javascript" src="/dynamic/js"></script>

```

Be warned I've set a cache for the output, so if you're changing your JS and refreshing the page you might want to disable the cache!

I jsut need to come back and figure out how to gzip it.

`*` You shouldn't use VaryByParam="None" because that causes the Vary header to be send, which [causes the browser to go back and check for a new version](https://stackoverflow.com/questions/376851/expire-output-cache-asp-net-mvc#486072). If you really have to change your js content then your users are just goin to have to wait 5 minutes for it!