/// <summary> /// Renders a Razor view from an embedded resource. /// </summary> /// <param name="helper">MVC HTML helper instance.</param> /// <param name="resourceName">Embedded resource name.</param> /// <param name="modelType">Type of model.</param> /// <param name="model">Model instance.</param> /// <returns>Rendered resource as an MvcHtmlString.</returns> /// <remarks> /// If needed by view, define ViewBag.DataContext before rendering resource. /// </remarks> public static MvcHtmlString RenderResource(this HtmlHelper helper, string resourceName, Type modelType = null, object model = null) { MvcHtmlString result; DynamicViewBag viewBag = new DynamicViewBag(helper.ViewData); bool isPost = HttpContext.Current.Request.HttpMethod.Equals("POST", StringComparison.OrdinalIgnoreCase); viewBag.AddValue("IsPost", isPost); viewBag.AddValue("Request", HttpContext.Current.Items["MS_HttpRequestMessage"] ?? new HttpRequestMessage(isPost ? HttpMethod.Post : HttpMethod.Get, HttpContext.Current.Request.Url)); if (FilePath.GetExtension(resourceName).Equals(".vbhtml", StringComparison.OrdinalIgnoreCase)) { result = new MvcHtmlString(RazorEngine <VisualBasicEmbeddedResource> .Default.RunCompile(resourceName, modelType, model, viewBag)); } else { result = new MvcHtmlString(RazorEngine <CSharpEmbeddedResource> .Default.RunCompile(resourceName, modelType, model, viewBag)); } // Copy any new or updated view bag elements back to MVC view data dictionary foreach (string memberName in viewBag.GetDynamicMemberNames()) { object value; viewBag.TryGetMember(new MemberBinder(memberName), out value); if (value != null) { helper.ViewData[memberName] = value; } } return(result); }