2013-06-04 25 views
6

I次のコードを持っている:RazorEngine:オブジェクト参照がオブジェクトインスタンスに設定されていません

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); 
} 

と私は

@model NewsReleaseCreator.Models.NewsRelease 
@{ 
    Layout = "~/Views/Shared/_LayoutBlank.cshtml"; 
} 
@Model.Headline 

私は取得しています次のビューを使用しています:

[NullReferenceException:オブジェクト参照がオブジェクトのインスタンスに設定されていません] RazorEngine.Templating.TemplateBase.RazorEn C言語でgine.Templating.ITemplate.Run(ExecuteContextコンテキスト):\ Users \ユーザーマシュー\ドキュメントは、\ SRC \コア\ RazorEngine.Core \テンプレート化\ TemplateBase.cs GitHubの\ RazorEngineを\:139

私が削除した場合レイアウトラインは、それが

マイレイアウト

<!DOCTYPE html> 
<html> 
<head> 
    @RenderSection("MetaSection", false) 
    <title>@ViewBag.Title</title> 
    @RenderSection("HeaderSection", false) 
</head> 
<body> 
    @RenderBody() 
</body> 
</html> 

思考を正常に動作しますか?

答えて

0

は、私はちょうど呼ばれたコントローラからのいずれかを使用するように、コントローラコンテキストを必要としないレイザーエンジン

私のソリューションを使用していないことになりました。だから私のコントローラで

InstanceOfMyClass.ControllerCurrent = this 

そして、MyClassの

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(); 
     } 
    } 
3

IはTemplateBase.csのソース(https://github.com/Antaris/RazorEngine/blob/master/src/Core/RazorEngine.Core/Templating/TemplateBase.cs)見: 'レイアウト' 変数がNULLの場合、

line 139: return layout.Run(context); 

とNullReferenceExceptionのpossibeを。さて、 'レイアウト'とは何ですか?

public ITemplate Resolve(string cacheName, object model) 
{ 
    CachedTemplateItem cachedItem; 
    ITemplate instance = null; 
    if (_cache.TryGetValue(cacheName, out cachedItem)) 
     instance = CreateTemplate(null, cachedItem.TemplateType, model); 

    if (instance == null && _config.Resolver != null) 
    { 
     string template = _config.Resolver.Resolve(cacheName); 
     if (!string.IsNullOrWhiteSpace(template)) 
      instance = GetTemplate(template, model, cacheName); 
    } 

    return instance; 
} 

そして、私は_config.Resolverがnullの場合NullReferenceは、可能であることを、ここを参照してください:

line 133: var layout = ResolveLayout(Layout); 

は(https://github.com/Antaris/RazorEngine/blob/master/src/Core/RazorEngine.Core/Templating/TemplateService.cs)深います。解決者を確認してください。

+0

ないリゾルバが何であるかを確認しますが、私はおそらく – Jeff

+0

私の最終的な解決策は、かみそりのエンジンを使用しないことだった何かを明らかに逃しました。私は今私の答えを投稿します – Jeff

関連する問題