2011-03-17 57 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中的區域名稱。

這意味着您必須在查看視圖之前操作控制器上下文,或者您自己指定視圖。

當初始化相同的視圖引擎時,您可以使用視圖引擎中的視圖位置路徑,但我認爲這會引發比解決問題更多的問題。