5

拡張機能を作成HtmlHelperしていて、テンプレートの存在を名前で検索する必要があります。問題のテンプレートは、コンテキストに応じて表示テンプレートまたはエディター テンプレートである場合があります。私の最初の考えは、ViewEngines.Engines.FindPartialViewメソッドを使用することでした。ただし、このメソッドはディレクトリ~/Views/Shared/DisplayTemplates~/Views/Shared/EditorTemplatesディレクトリを検索していないようです。
これには正当な理由があると思います。結局のところ、ViewEngineコンテキストの追加情報がなければ、表示テンプレートまたはエディター テンプレートを返すかどうかをどのように知るのでしょうか?

したがって、それは疑問につながります:特定のEditorTemplate / DisplayTemplateを検索するにはどうすればよいですか?これらの場所を含めるためにカスタム ビュー エンジンをViewEnginesコレクションに追加することを検討しました。しかし、これが問題になるのではないかと心配しています。

私の主な懸念は、DisplayTemplate / EditorTemplateビューが意図しないものに提供される可能性があることです。他の誰かがこれを問題と見なしていますか?必要に応じて特定の/インスタンス
を新しく作成し、コレクションからこの特定の機能を排除する方が良いでしょうか? 私が見逃しているものは他にありますか?DisplayTemplateViewEngineEditorTemplateViewEngineViewEngines

4

3 に答える 3

0

相対パスをマップするだけの理由

string path = Server.MapPath("~/View/");

そして、.cshtmlその特定のディレクトリの出口に基づいてファイルが終了するかどうかを確認します

string fileName = "MyView.cshtml";
if (File.Exists(path + fileName))
    //do somethings
else
    //do another things
于 2013-05-02T14:46:52.637 に答える
0

WebFormViewEngineは、ビューを検索する場所 (のパターン) を定義するいくつかのプロパティがあります。

使用するビュー エンジンの規則に従うか、カスタム ビュー パスを使用してカスタム ビュー エンジン (たとえば、Razor を拡張する) を作成します。

後者はここで説明されています:

public class CustomViewEngine : RazorViewEngine
{
    public CustomViewEngine()
    {
        var viewLocations =  new[] {  
            "~/Views/{1}/{0}.cshtml",  
            "~/Views/Shared/{0}.cshtml",  
            "~/Views/Shared/DisplayTemplates/{0}.cshtml",  
            "~/Views/Shared/DisplayTemplates/{1}/{0}.cshtml",
            // etc
        };

        this.PartialViewLocationFormats = viewLocations;
        this.ViewLocationFormats = viewLocations;
    }
}

したがって、ヘルパーでは、現在のビュー エンジンを検索し、そのビューの場所のパスを検索して、それらを順番に検索する必要があると思います。Html ヘルパーには、現在実行中のビューを取得するためのメソッドまたはプロパティがありませんか?

于 2013-05-02T14:43:17.063 に答える