首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从类库呈现ViewUserControl

从类库呈现ViewUserControl
EN

Stack Overflow用户
提问于 2010-09-16 17:28:12
回答 2查看 584关注 0票数 1

我想呈现一些HTML在电子邮件中使用。我有一个表示行和列的对象集合,所以我可以用纯C#代码使用StringBuilder来呈现HTML。

但是我更喜欢在类库中有一个ViewUserControl或一个ViewPage,这样就可以进行呈现。我希望能够使用ViewUserControl和呈现方法强文本d从外部的ASP.NET MVC应用程序,例如Windows。

如何从类库呈现视图?

我尝试过这样做,但是对RenderPartial的调用会抛出一个NullReferenceException。

代码语言:javascript
复制
[TestMethod]
public void RenderViewToString()
{
string viewName = "EmailTest";
string viewData = "martin";

//Create memory writer 
var sb = new StringBuilder();
var memWriter = new StringWriter(sb);

//Create fake http context to render the view 
var fakeResponse = new HttpResponse(memWriter);
var fakeContext = new HttpContext(new HttpRequest("fake.html", "http://localhost/fake.html", ""), fakeResponse);
var fakeRouteData = new RouteData();
fakeRouteData.Values.Add("Controller", "Fake");
var fakeControllerContext = new ControllerContext(new HttpContextWrapper(fakeContext), fakeRouteData, new FakeController());

HttpContext.Current = fakeContext;

//Use HtmlHelper to render partial view to fake context 
var html = new HtmlHelper(new ViewContext(fakeControllerContext, new FakeView(), new ViewDataDictionary(), new TempDataDictionary(), memWriter), new ViewPage());

html.RenderPartial(viewName, viewData);

//Flush memory and return output 
memWriter.Flush();

var htmlString = sb.ToString();

}

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-09-17 00:48:07

您所遇到的问题是asp.net引擎,这是默认视图引擎所使用的。

您可以通过使用不同的视图引擎来避免这种情况,比如火花。

另一个选择是使用类似于您的代码,但是启动一个asp.net应用程序域/我将在几天后共享一些代码。

票数 0
EN

Stack Overflow用户

发布于 2010-09-16 17:28:57

尝尝这个

代码语言:javascript
复制
public static string RenderPartialToString(string controlName, object viewData)
{
    ViewDataDictionary vd = new ViewDataDictionary(viewData);
    ViewPage vp = new ViewPage { ViewData = vd };
    Control control = vp.LoadControl(controlName);

    vp.Controls.Add(control);

    StringBuilder sb = new StringBuilder();
    using (StringWriter sw = new StringWriter(sb))
    {
        using (HtmlTextWriter tw = new HtmlTextWriter(sw))
        {
            vp.RenderControl(tw);
        }
    }
    return sb.ToString();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3729131

复制
相关文章

相似问题

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