我正在使用 Orchard 1.6 并希望使用主题自定义布局等将视图呈现为字符串。
事实上,有果园 cms 将形状渲染为电子邮件模板,但我需要更多细节(无法对该答案添加评论,我没有足够的代表:(,并且无法发送私人消息)
我在控制器中进行测试(将来我想在单独的任务中执行 int )。所以控制器是(模型是具有一些属性的简单类)
var renderer = new ViewRenderer(
_workContextAccessor,
_siteThemeService,
_services);
var shape = ShapeFactory.MyTestShape(Model: model);
var result = renderer.RenderMessage(shape);
渲染器是
public string RenderMessage(dynamic shape)
{
var httpContext = new ViewRendererHttpContext(new Uri("http://localhost/orchard/"));
var routeData = new RouteData();
routeData.DataTokens.Add("IWorkContextAccessor", _workContextAccessor);
routeData.Values["controller"] = "Dummy";
var requestContext = new RequestContext(httpContext, routeData);
var controllerContext = new ControllerContext(requestContext, new DummyController());
var viewContext = new ViewContext(controllerContext, new ShapeView(shape), new ViewDataDictionary(shape.Model), new TempDataDictionary(), new StringWriter());
var scope = _workContextAccessor.CreateWorkContextScope(viewContext.HttpContext);
scope.WorkContext.CurrentTheme = _siteThemeService.GetSiteTheme();
var page = new ViewRendererWebViewPage(viewContext, new ViewDataDictionary<dynamic>(shape.Model));
var displayHelperFactory = _services.WorkContext.Resolve<IDisplayHelperFactory>();
var display = displayHelperFactory.CreateHelper(page.ViewContext, page);
var data = display(shape).ToHtmlString();
scope.Dispose();
return data;
}
ViewRendererHttpContext 只是从 HttpContextBase 派生出来的,非常简单(可以贴出它的代码),DummyController 是从 Controller 派生的空类,ShapeView 是从 IView 派生的 epmty 类。
我的模块中有 View/MyTestShape.cshtml。
问题是var data = display(shape).ToHtmlString();
在深入
执行时var result = htmlHelper.Partial(harvestShapeInfo.TemplateVirtualPath, displayContext.Value);
(类“ShapeTemplateBindingStrategy”,方法“private IHtmlString Render(......)”)我有异常“方法或操作未实现”。
我应该实现什么方法和什么类?
感谢您的任何提示。我的英语很糟糕所以很抱歉。