Frage

Ich habe dies bemerkt, als ich in meiner Ansicht Folgendes verwendet habe:

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

Die obige Zeile gibt nur den Namen der Ansicht zurück, also in diesem Fall ClientOnDocuments. Die Standard -View -Engine nimmt dann ein und versucht zu finden ClientOnDocuments.ascx im Ordner der aktuellen Ansicht und im gemeinsam genutzten Ordner, aber nicht in DisplayTemplates und EditorTemplates Mappe.

Da ich mit meiner Verwendung von T4MVC ziemlich weit gegangen bin, möchte ich es nicht abwerfen oder verschiedene Arten von Referenzierungsansichten mischen (zum Beispiel funktioniert das obige, wenn wir den Pfad zur Vorlage bereitstellen).

Der Grund liegt in diesem Code, den T4MVC generiert:

    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";
        }

Sie können sehen, dass mit der in der gemeinsam genutzten Wurzel enthaltenen Ansicht alles in Ordnung ist, aber anscheinend nicht die Unterordner gut behandelt.

Ich weiß, ich könnte die T4MVC -Vorlagendatei ändern, möchte aber tatsächlich eine Antwort von David Ebbo ob er dies ändern/korrigieren wird.

Hoffentlich folgt er so, zumindest habe ich ihn hier im Dezember gesehen.

War es hilfreich?

Lösung

Interessanterweise wurde dieses unterschiedliche Verhalten absichtlich eingeführt, nachdem ein anderer Benutzer Probleme gestoßen hatte. Suchen Sie danach in der 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"
};

Normalerweise erhalten Subordner volle Wege, aber nur diese beiden nicht.

Ich denke, der Unterschied war, dass dieser Benutzer Displayfor/Editor für die Rendere angerufen hat, während Sie RenderPartial anrufen.

Da dies in der Einstellungsdatei und nicht in der Hauptvorlage liegt, können Sie die Liste einfach ändern, wenn Sie dieses Verhalten nicht wünschen

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

Hoffe das hilft! :)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top