2009-08-28 14 views
4

指定したコントローラの追加フォルダ内の部分共有ビューを探すようにViewEngineに指示することはできますか(以外の場合は)。指定したコントローラの部分共有ビューをグループ化するにはどうすればいいですか?

私はWebFormViewEngineを使用しています。

これは私のPartialViewLocationsが現時点でどのように見えるかを示しています。

public class ViewEngine : WebFormViewEngine 
    { 
     public ViewEngine() 
     { 
      PartialViewLocationFormats = PartialViewLocationFormats 
       .Union(new[] 
         { 
          "~/Views/{1}/Partial/{0}.ascx", 
          "~/Views/Shared/Partial/{0}.ascx" 
         }).ToArray(); 
     } 

答えて

2

確か。この場合、PartialViewLocationFormatsは変更しないでください。代わりに:

public override ViewEngineResult FindPartialView(
     ControllerContext controllerContext, 
     string partialViewName, 
     bool useCache) 
    { 
     ViewEngineResult result = null; 

     if (controllerContext.Controller.GetType() == typeof(SpecialController)) 
     { 
      result = base.FindPartialView(
       controllerContext, "Partial/" + partialViewName, useCache); 
     } 

     //Fall back to default search path if no other view has been selected 
     if (result == null || result.View == null) 
     { 
      result = base.FindPartialView(
       controllerContext, partialViewName, useCache); 
     } 

     return result; 
    } 
+1

私はあなたを愛しています! :D –

+0

これをコントローラーのフィルターで微調整する必要があります。[AddPartialViewLocation( "Shared/SuperFolder")]のようなものです。あなたはどう思いますか?良い/悪い考えですか? –

+0

おそらくIDictionary >を使用します。次に、任意の数のコントローラタイプを調べるための列挙可能なパスリストを得ることができます。上記のメソッドは、現在のコントローラの型が辞書(w/TryGetValue)にあるかどうかを調べ、見つかった場合はその型のパスを順番に調べます。 –

関連する問題