ASP.NET MVC剃刀:如何呈现剃刀局部视图的HTML控制器内的行动 [英] ASP.NET MVC Razor: How to render a Razor Partial View's HTML inside the controller action

查看:175
本文介绍了ASP.NET MVC剃刀:如何呈现剃刀局部视图的HTML控制器内的行动的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何生成一个给定的局部视图对ASP.NET视图引擎<一个一个HTML href=\"http://stackoverflow.com/questions/286132/asp-net-mvc-getting-a-partial-views-html-from-inside-of-the-controller\">is众所周知。

但是,如果此功能是在剃刀局部视图中使用它不工作,作为例外,说,局部视图不会从用户控件派生。

如何解决渲染支持剃刀局部视图?

我需要这个,因为我生成的电子邮件成为本部分景色...

更新:

code失败(@mcl):

 公共字符串RenderPartialToString(字符串控件名称,对象的ViewData)
    {
        的ViewPage的ViewPage =新的ViewPage(){ViewContext =新ViewContext()};
        viewPage.Url = this.GetUrlHelper();        字符串fullControlName =〜/查看/电子邮件/+控件名称+的.ascx        viewPage.ViewData =新的ViewDataDictionary(可视数据);
        viewPage.Controls.Add(viewPage.LoadControl(fullControlName));        StringBuilder的SB =新的StringBuilder();
        使用(StringWriter的SW =新的StringWriter(某人))
        {
            使用(HtmlTextWriter的TW =新的HtmlTextWriter(SW))
            {
                viewPage.RenderControl(TW);
            }
        }
        返回sb.ToString();
    }


解决方案

  @ Html.Partial(nameOfPartial模型)

更新

 保护字符串RenderPartialViewToString(字符串的viewName,对象模型)
{
    如果(string.IsNullOrEmpty(的viewName))
        的viewName = ControllerContext.RouteData.GetRequiredString(行动);    ViewData.Model =模型;    使用(StringWriter的SW =新的StringWriter()){
        ViewEngineResult的ViewResult = ViewEngines.Engines.FindPartialView(ControllerContext,的viewName);
        ViewContext viewContext =新ViewContext(ControllerContext,viewResult.View,ViewData的,TempData的,SW);
        viewResult.View.Render(viewContext,SW);        返回sw.GetStringBuilder()的ToString()。
    }
}

How to generate a HTML of a given partial view on ASP.NET view engine is known.

But if this functionality is used on razor partial view it does not work, as exception says the partial view does not derive from "UserControl".

How to fix the rendering to support razor partial view?

I need this because I generate emails form this partial views ...

UPDATE:

Code that fails (@mcl):

public string RenderPartialToString(string controlName, object viewData)
    {
        ViewPage viewPage = new ViewPage() { ViewContext = new ViewContext() };
        viewPage.Url = this.GetUrlHelper();

        string fullControlName = "~/Views/Email/" + controlName + ".ascx";

        viewPage.ViewData = new ViewDataDictionary(viewData);
        viewPage.Controls.Add(viewPage.LoadControl(fullControlName));

        StringBuilder sb = new StringBuilder();
        using (StringWriter sw = new StringWriter(sb))
        {
            using (HtmlTextWriter tw = new HtmlTextWriter(sw))
            {
                viewPage.RenderControl(tw);
            }
        }
        return sb.ToString();
    }

解决方案

@Html.Partial("nameOfPartial", Model)

Update

protected string RenderPartialViewToString(string viewName, object model)
{
    if (string.IsNullOrEmpty(viewName))
        viewName = ControllerContext.RouteData.GetRequiredString("action");

    ViewData.Model = model;

    using (StringWriter sw = new StringWriter()) {
        ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
        ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
        viewResult.View.Render(viewContext, sw);

        return sw.GetStringBuilder().ToString();
    }
}

这篇关于ASP.NET MVC剃刀:如何呈现剃刀局部视图的HTML控制器内的行动的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆