2011-03-17 59 views
0

我有一个帮助器类,用于创建和发送“HTML电子邮件”。此课程位于我的网站/基础结构/通讯文件夹中。我在我的项目中创建一个视图,并使用FindView来查找此视图。FindView无法正常工作

public Stream GetViewStream(string viewName, object model, ControllerContext context, ViewDataDictionary viewData, TempDataDictionary tempData) 
     { 
      var view = ViewEngines.Engines.FindView(context, viewName,""); 
      if (view == null) 
      { 
       throw new InvalidOperationException(string.Format("Could not find a view named '{0}'", viewName)); 
      } 

      var sb = new StringBuilder(); 
      using (var writer = new StringWriter(sb)) 
      { 
       var viewContext = new ViewContext(context, view.View, viewData, tempData, writer); 
       view.Render(viewContext, writer); 

       writer.Flush(); 
      } 
      return new MemoryStream(Encoding.UTF8.GetBytes(sb.ToString())); 
     } 

在我的项目我有一个地区文件夹,每个系统都有一个文件夹,这些文件夹内,我有模型,视图和控制器。

现在

我的问题是,当我用这个方法从我MailController它的Web /地区/邮件搜索/浏览次数为这是正确的,但是当我用这个从我AdvisoryController它搜索在视图中查看网络/浏览次数。

我该如何解决这个问题,为什么会发生这种情况?

回答

0

如果您在类VirtualPathProviderViewEngine,尤其是方法FindView中混淆,则会看到它使用名为GetPath的方法来获取搜索视图的路径。

事实证明,除非您指定视图的路径(使用“〜”或“/”作为第一个字母),否则它将使用ControllerContext中的区域名称。

这意味着您必须在查看视图之前操作控制器上下文,或者您自己指定视图。

当初始化相同的视图引擎时,您可以使用视图引擎中的视图位置路径,但我认为这会引发比解决问题更多的问题。