Files
Disco/Disco.Web.Extensions/MvcExtensions/PartialCompiled/PartialCompiledHtmlExtensions.cs
T
2013-02-01 12:35:28 +11:00

52 lines
2.1 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using System.Web;
using System.Web.WebPages;
using System.IO;
using System.Globalization;
namespace Disco.Web.Extensions
{
public static class PartialCompiledHtmlExtensions
{
#region Render Compiled Views
private static void RenderPartialCompiledInternal(this HtmlHelper htmlHelper, Type viewType, object model, TextWriter writer)
{
if (writer == null)
throw new ArgumentNullException("writer");
WebViewPage page = Activator.CreateInstance(viewType) as WebViewPage;
if (page == null)
throw new InvalidOperationException("Invalid View Type");
page.ViewContext = htmlHelper.ViewContext;
page.ViewData = new ViewDataDictionary(model);
page.InitHelpers();
HttpContextBase httpContext = htmlHelper.ViewContext.HttpContext;
page.ExecutePageHierarchy(new WebPageContext(httpContext, null, model), writer, null);
}
public static void RenderPartialCompiled(this HtmlHelper htmlHelper, Type viewType)
{
RenderPartialCompiled(htmlHelper, viewType, null);
}
public static void RenderPartialCompiled(this HtmlHelper htmlHelper, Type viewType, object model)
{
htmlHelper.RenderPartialCompiledInternal(viewType, model, htmlHelper.ViewContext.Writer);
}
public static MvcHtmlString PartialCompiled(this HtmlHelper htmlHelper, Type viewType)
{
return PartialCompiled(htmlHelper, viewType, null);
}
public static MvcHtmlString PartialCompiled(this HtmlHelper htmlHelper, Type viewType, object model)
{
using (StringWriter writer = new StringWriter(CultureInfo.CurrentCulture))
{
htmlHelper.RenderPartialCompiledInternal(viewType, model, writer);
return MvcHtmlString.Create(writer.ToString());
}
}
#endregion
}
}