首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Razor MVC Razor:如何在控制器操作中呈现ASP.NET局部视图的HTML

Razor MVC Razor:如何在控制器操作中呈现ASP.NET局部视图的HTML
EN

Stack Overflow用户
提问于 2010-12-03 18:19:47
回答 6查看 127.3K关注 0票数 97

如何在ASP.NET视图引擎is known上生成给定部分视图的超文本标记语言。

但如果在剃刀部分视图上使用此功能,它将不起作用,因为exception表示部分视图不是从"UserControl“派生的。

如何修复渲染以支持razor局部视图?

我需要这个,因为我从这个局部视图中生成电子邮件...

更新:

失败的代码(@mcl):

代码语言:javascript
复制
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();
    }
EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-03 18:27:18

代码语言:javascript
复制
@Html.Partial("nameOfPartial", Model)

更新

代码语言:javascript
复制
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();
    }
}
票数 153
EN

Stack Overflow用户

发布于 2013-05-09 13:07:45

虽然已经给出了足够的答案,但我想提出一个不太冗长的解决方案,它可以在没有MVC控制器类中可用的帮助器方法的情况下使用。通过使用名为"RazorEngine“的第三方库,您可以使用.Net文件IO来获取剃刀文件的内容,并调用

代码语言:javascript
复制
string html = Razor.Parse(razorViewContentString, modelObject);

获取第三方库here

票数 7
EN

Stack Overflow用户

发布于 2011-12-31 16:19:53

您还可以使用来自hereRenderView Controller extension (source)

并像这样使用它:

代码语言:javascript
复制
public ActionResult Do() {
var html = this.RenderView("index", theModel);
...
}

它适用于razorweb-forms视图引擎

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4344533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档