2013-06-04 9 views
6

मैं निम्नलिखित कोड है: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 gine.Templating.ITemplate.Run (ExecuteContext संदर्भ) C: \ Users \ मैथ्यू \ Documents \ GitHub \ RazorEngine \ src \ कोर \ RazorEngine.Core \ Templating \ TemplateBase.cs: 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

मैं TemplateBase.cs के स्रोतों (https://github.com/Antaris/RazorEngine/blob/master/src/Core/RazorEngine.Core/Templating/TemplateBase.cs) देखा:

line 139: return layout.Run(context); 

NullReferenceException possibe, अगर 'लेआउट' चर रिक्त है। ठीक है, 'लेआउट' क्या है?

line 133: var layout = ResolveLayout(Layout); 

जाओ गहरी (https://github.com/Antaris/RazorEngine/blob/master/src/Core/RazorEngine.Core/Templating/TemplateService.cs):

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

और, मैं यहाँ देखते हैं, कि NullReference, संभव है अगर _config.Resolver रिक्त है। अपने रिजॉल्वर की जांच करें।

+0

यकीन है कि क्या एक समाधानकर्ता है, लेकिन मैं शायद कुछ स्पष्ट याद – Jeff

+0

मेरे अंतिम समाधान उस्तरा इंजन का उपयोग नहीं किया गया था। मैं अब अपना जवाब पोस्ट करूंगा – Jeff

संबंधित मुद्दे

 संबंधित मुद्दे