CodePaste Logo
New Snippet New Snippet Recent Snippets Recent Snippets My Snippets My Snippets My Favorites Favorites Web Code Search Snippets Search
Sign inor Register
Language: C#

Javascript file actionresult

482 Views   
public class JavascriptFileResult : ViewResult
{
    private readonly bool shouldCompress;
    private readonly int cacheDuration;
 
    public JavascriptFileResult() : this(false)
    {
            
    }
 
    public JavascriptFileResult(bool shouldCompress) : this(shouldCompress, 0)
    {
            
    }
 
    public JavascriptFileResult(bool shouldCompress, int cacheDuration)
    {
        this.shouldCompress = shouldCompress;
        this.cacheDuration = cacheDuration;
    }
 
    public int CacheDuration
    {
        get { return cacheDuration; }
    }
 
    public override void ExecuteResult(ControllerContext context)
    {
        var textWriter = new StringWriter();
        var viewResult = GetViewResult(textWriter);
        viewResult.ExecuteResult(context);
 
        var result = textWriter.ToString()
            .RegexReplace("<script.*?>", string.Empty)
            .Replace("</script>", string.Empty);
 
#if RELEASE
        context.HttpContext.Response.CacheControl = "Public";
        context.HttpContext.Response.Expires = _cacheDuration;
#endif
 
        context.HttpContext.Response.ContentType = "text/javascript";
        context.HttpContext.Response.Write((shouldCompress ? JavaScriptCompressor.Compress(result) : result));
    }
 
    private ExtendedViewResult GetViewResult(TextWriter textWriter)
    {
        return new ExtendedViewResult(textWriter)
                    {
                        MasterName = MasterName,
                        TempData = TempData,
                        View = View,
                        ViewData = ViewData,
                        ViewEngineCollection = ViewEngineCollection,
                        ViewName = ViewName
                    };
    }
 
    private class ExtendedViewResult : ViewResult
    {
        private readonly TextWriter textWriter;
 
        public ExtendedViewResult(TextWriter textWriter)
        {
            this.textWriter = textWriter;
        }
 
        public override void ExecuteResult(ControllerContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (String.IsNullOrEmpty(ViewName))
            {
                ViewName = context.RouteData.GetRequiredString("action");
            }
 
            ViewEngineResult result = null;
 
            if (View == null)
            {
                result = FindView(context);
                View = result.View;
            }
 
            var viewContext = new ViewContext(context, View, ViewData, TempData, textWriter);
            View.Render(viewContext, textWriter);
 
            if (result != null)
            {
                result.ViewEngine.ReleaseView(context, View);
            }
        }
    }
}
by Jakobsson
  June 02, 2010 @ 5:35am

Add a comment


Report Abuse
brought to you by:
West Wind Techologies