T4MVC non supporta DisplayTemplates e EDITTemPlates
-
28-10-2019 - |
Domanda
L'ho notato quando ho usato quanto segue nella mia vista:
<% Html.RenderPartial(MVC.Shared.Views.EditorTemplates.ClientOnDocuments); %>
La riga sopra restituisce solo il nome della vista, quindi in questo caso ClientOnDocuments
. Il motore di visualizzazione predefinito si entra e cerca di trovare ClientOnDocuments.ascx
Nella cartella della vista corrente e nella cartella condivisa ma non in DisplayTemplates
e EditorTemplates
cartella.
Da quando sono andato abbastanza lontano con il mio uso di T4MVC, non voglio scaricarlo o mescolare diversi stili di viste di riferimento (ad esempio, quanto sopra funziona se forniamo il percorso al modello).
Il motivo risiede in questo codice che T4MVC genera:
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";
}
Puoi vederlo con la vista contenuta nella radice condivisa, tutto va bene, ma a quanto pare non gestisce bene le sottocartelle.
So che potrei cambiare il file del modello T4MVC ma in realtà vorrei una risposta da David Ebbo sul fatto che cambierà/correggerà questo.
Spero che lo segue, almeno l'ho visto qui a dicembre.
Soluzione
È interessante notare che questo comportamento diverso è stato deliberatamente dopo che un altro utente ha avuto problemi. Cerca questo nel 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"
};
Quindi, normalmente, le cartelle secondarie ottengono percorsi completi, ma solo quei due no.
Penso che la differenza fosse che quell'utente chiamava Displayfor/Editor per renderli, mentre si chiama RenderPartial.
In ogni caso, poiché questo è nel file delle impostazioni e non nel modello principale, puoi semplicemente modificare l'elenco se non si desidera quel comportamento, cioè
readonly string[] NonQualifiedViewFolders = new string[] { };
Spero che sia di aiuto! :)