Ejemplo n.º 1
0
        /// <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);
        }