я использую Orchard 1.6 и хочу отобразить представление в строку с пользовательским макетом темы и так далее.
На самом деле существует orchard 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.
У меня есть View/MyTestShape.cshtml в моем модуле.
Проблема заключается в том, что при выполнении var data = display(shape).ToHtmlString();
в глубину var result = htmlHelper.Partial(harvestShapeInfo.TemplateVirtualPath, displayContext.Value);
(класс «ShapeTemplateBindingStrategy», метод «private IHtmlString Render (.....)») у меня есть исключение «Метод или операция не реализованы».
Какой метод и в каком классе я должен реализовать?
Спасибо за любые советы. Мой английский очень плохой, так что извините за это.