我有以下代码:
public string View(string view, object model)
{
var template = File.ReadAllText(HttpContext.Current.Request.MapPath(@"~\Views\PublishTemplates\" + view + ".cshtml"));
if (model == null)
{
model = new object();
}
return RazorEngine.Razor.Parse(template, model);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用以下视图
@model NewsReleaseCreator.Models.NewsRelease
@{
Layout = "~/Views/Shared/_LayoutBlank.cshtml";
}
@Model.Headline
Run Code Online (Sandbox Code Playgroud)
我正进入(状态:
[NullReferenceException:对象引用未设置为对象的实例.]在c:\ Users\Matthew\Documents\GitHub\RazorEngine\src\Core \中的RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context) RazorEngine.Core \模板\ TemplateBase.cs:139
如果我删除布局线,它工作正常
我的布局
<!DOCTYPE html>
<html>
<head>
@RenderSection("MetaSection", false)
<title>@ViewBag.Title</title>
@RenderSection("HeaderSection", false)
</head>
<body>
@RenderBody()
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
思考?
我最终没有使用 Razor Engine
我的解决方案确实需要控制器上下文,因此我只使用被调用的控制器中的控制器上下文。所以在我的控制器中
InstanceOfMyClass.ControllerCurrent = this
Run Code Online (Sandbox Code Playgroud)
在我的课堂上
public string RenderViewToString(string viewName, object model, string layoutName)
{
ControllerCurrent.ViewData.Model = model;
try
{
using (StringWriter sw = new StringWriter())
{
ViewEngineResult viewResult = ViewEngines.Engines.FindView(ControllerCurrent.ControllerContext, viewName, layoutName);
ViewContext viewContext = new ViewContext(ControllerCurrent.ControllerContext, viewResult.View, ControllerCurrent.ViewData, ControllerCurrent.TempData, sw);
viewResult.View.Render(viewContext, sw);
return sw.GetStringBuilder().ToString();
}
}
catch (Exception ex)
{
return ex.ToString();
}
}
Run Code Online (Sandbox Code Playgroud)