Pregunta

He notado esto cuando usé lo siguiente en mi opinión:

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

La línea anterior devuelve solo el nombre de la vista, así que en este caso ClientOnDocuments. El motor de vista predeterminado luego entra e intenta encontrar ClientOnDocuments.ascx en la carpeta de la vista actual y en la carpeta compartida pero no en DisplayTemplates y EditorTemplates carpeta.

Como he ido bastante lejos con mi uso de T4MVC, no quiero tirarlo o mezclar diferentes estilos de referencias (por ejemplo, lo anterior funciona si proporcionamos la ruta a la plantilla).

La razón radica en este código que genera 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";
        }

Puede ver que con la vista contenida en la raíz compartida todo está bien, pero aparentemente no maneja bien las subcarpetas.

Sé que podría cambiar el archivo de plantilla T4MVC, pero en realidad me gustaría una respuesta de David Ebbo Sobre si va a cambiar/corregir esto.

Esperemos que lo siga, así que, al menos, lo vi aquí en diciembre.

¿Fue útil?

Solución

Curiosamente, este comportamiento diferente se puso deliberadamente después de que otro usuario tuvo problemas. Busque esto en 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"
};

Entonces, normalmente, las subpoletas obtienen rutas completas, pero solo esos dos no.

Creo que la diferencia era que ese usuario estaba llamando a Displayfor/Editor para representarlos, mientras llamas RenderPartial.

En cualquier caso, dado que este está en el archivo de configuración y no en la plantilla principal, simplemente puede cambiar la lista si no desea ese comportamiento, es decir

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

¡Espero que esto ayude! :)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top