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.

È stato utile?

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! :)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top