質問

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

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

上記の行はビューの名前だけを返しますので、この場合 ClientOnDocuments. 。その後、デフォルトのビューエンジンがキックインして見つけようとします ClientOnDocuments.ascx 現在のビューのフォルダーと共有フォルダーではありませんが DisplayTemplatesEditorTemplates フォルダ。

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テンプレートファイルを変更できることは知っていますが、実際にはからの応答が必要です デビッド・エブボ 彼がこれを変更/修正するかどうかについて。

うまくいけば、彼がそうすることを願っています、少なくとも12月にここで彼を見ました。

役に立ちましたか?

解決

興味深いことに、この異なる動作は、別のユーザーが問題に遭遇した後、故意に掲載されました。 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[] { };

お役に立てれば! :)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top