T4MVCは、displayTemplatesと編集をサポートしていません
-
28-10-2019 - |
質問
私の見解で以下を使用したときにこれに気づきました:
<% 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テンプレートファイルを変更できることは知っていますが、実際にはからの応答が必要です デビッド・エブボ 彼がこれを変更/修正するかどうかについて。
うまくいけば、彼がそうすることを願っています、少なくとも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[] { };
お役に立てれば! :)