2

私の見解で以下を使用したとき、私はこれに気づきました:

<% Html.RenderPartial(MVC.Shared.Views.EditorTemplates.ClientOnDocuments); %>

上記の行はビューの名前のみを返すため、この場合はClientOnDocuments. 次に、デフォルトのビュー エンジンが起動しClientOnDocuments.ascx、現在のビューのフォルダーと共有フォルダーを検索しようとしますが、フォルダーDisplayTemplatesとフォルダーは検索しませんEditorTemplates

私は T4MVC をかなり使いこなしたので、それをダンプしたり、ビューを参照するさまざまなスタイルを混ぜたりしたくありません (たとえば、テンプレートへのパスを指定すると、上記は機能します)。

その理由は、T4MVC が生成する次のコードにあります。

    public class ViewNames {
    ...
        public readonly string FirmHeader = "~/Views/Shared/FirmHeader.ascx";
        public readonly string PostsSelector = "~/Views/Shared/PostsSelector.ascx";
        static readonly _DisplayTemplates s_DisplayTemplates = new _DisplayTemplates();
        public _DisplayTemplates DisplayTemplates { get { return s_DisplayTemplates; } }
        public partial class _DisplayTemplates{
            public readonly string ClientOnDocuments = "ClientOnDocuments";
            public readonly string DateTime = "DateTime";
        }
        static readonly _EditorTemplates s_EditorTemplates = new _EditorTemplates();
        public _EditorTemplates EditorTemplates { get { return s_EditorTemplates; } }
        public partial class _EditorTemplates{
            public readonly string ClientOnDocuments = "ClientOnDocuments";
            public readonly string DateTime = "DateTime";
            public readonly string PostCode = "PostCode";
        }

共有ルートに含まれるビューではすべて問題ないことがわかりますが、明らかにサブフォルダーを適切に処理していません。

T4MVC テンプレート ファイルを変更できることはわかっていますが、David Ebboがこれを変更または修正する予定があるかどうかについて、実際に回答を求めています。

願わくば、彼が SO に続くことを願っています。少なくとも私は 12 月にここで彼に会いました。

4

1 に答える 1

4

興味深いことに、別のユーザーが問題に遭遇した後、この異なる動作が意図的に導入されました。T4MVC.settings.t4 でこれを探します。

// Views in DisplayTemplates and EditorTemplates folders shouldn't be fully qualifed as it breaks
// the templated helper code
readonly string[]  NonQualifiedViewFolders = new string[] {
  "DisplayTemplates",
  "EditorTemplates"
};

したがって、通常、サブフォルダーは完全なパスを取得しますが、それらの 2 つだけは取得しません。

違いは、RenderPartial を呼び出している間に、そのユーザーがそれらをレンダリングするために DisplayFor/EditorFor を呼び出していたことだと思います。

いずれにせよ、これはメイン テンプレートではなく設定ファイルにあるため、その動作が必要ない場合は、単にリストを変更できます。つまり、

readonly string[]  NonQualifiedViewFolders = new string[] { };

お役に立てれば!:)

于 2011-02-02T23:59:51.873 に答える