2012-03-28 16 views
7

He estado luchando con mi personalización de EditorForModel y la denominación de los elementos HTML emitidos por mi código y los ayudantes incorporados de MVC3. Mi código es muy simple y claramente falta algunas sutilezas, como nombrar correctamente los elementos renderizados.Estoy buscando recursos avanzados sobre la personalización de plantillas de editor MVC3

Estoy buscando recursos avanzados que puedan ayudarme a perfeccionar esta área de mi desarrollo actual, especialmente con vistas a subdividir un modelo de vista principal en submodelos más pequeños, para poder aplicar, por ejemplo, tres llamadas EditorForModel en una vista , para dividir los editores de modelos generados en columnas de formularios o páginas de pestañas.

Mi 'anulación' actual de la plantilla por defecto EditorForModel es el siguiente:

@{ 
    // TODO Filtering for subsets of model without having to bind separate models. 
     var properties = ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForEdit && !pm.IsComplexType && !ViewData.TemplateInfo.Visited(pm)); 
    } 
<fieldset> 
    <legend>@ViewData.ModelMetadata.DisplayName</legend> 
    <ul class="form-column"> 
     @foreach (var prop in properties) 
     { 
      <li> 
        @{ 
      if (prop.HideSurroundingHtml) 
      { 
         @Html.Editor(prop.DisplayName ?? prop.PropertyName) 
      } 
      else 
      { 
         @Html.Label(prop.PropertyName, (prop.IsRequired ? "* " : "") + (prop.DisplayName ?? prop.PropertyName)) 
         @Html.Editor(prop.PropertyName) 
      } 
        } 
      </li> 
     } 
    </ul> 
</fieldset> 

He copiado y modificado el código de la plantilla de ejemplo Object.ascx en this article en Brad Wilson's blog. ¿Qué recursos puedo consultar para enriquecer esto y adaptarlo a tantos escenarios como sea posible, de la manera más rica posible?

+1

Si están buscando plantillas HTML potentes, recomendaría revisar las convenciones de plantilla HTML desde el equipo FubuMVC. Son 100% compatibles con ASP.NET MVC y mucho más flexibles/composables. Los he usado por más de 2 años y me encantan. http://craigcav.wordpress.com/2011/11/22/applying-conventions-in-asp-net-mvc/ Si hace clic en la publicación de Nick hay un enlace a cómo hacer que esto funcione en ASP.NET MVC. – Ryan

+1

No creo que pueda hacer demasiado nuch mejor que esa plantilla, es decir: una lista de etiquetas + Editor o Pantalla para cada propiedad. Si desea que su plantilla de objeto sea muy genérica, la única mejora que puede hacer es manejar el atributo de Orden para decidir en qué orden listar las propiedades. Por otro lado, puede diseñar su marco basado en atributos personalizados que controlan la forma en que se organiza la plantilla. Sin embargo, su forma de hacerlo depende en gran medida de su aplicación. –

Respuesta

1

Su plantilla parece bastante buena para un editor muy genérico. Si entiendo su pregunta correctamente, está buscando más formas de dividir y filtrar las propiedades de su modelo.

Una forma de filtrar el modelo en subconjuntos sin tener que crear submodelos sería usar atributos. Puede crear tantos atributos como desee y hacer que implementen IMetadataAware. Allí podría agregar propiedades arbitrarias a la bolsa de propiedades ModelMetadata.AdditionalValues, y sus plantillas de editor inspeccionar esos valores.

Como alternativa puede implementar su propio encargo ModelMetadataProvider que devuelve un objeto personalizado ModelMetadata que tenía las propiedades que se quería.

Cualquiera de los dos le permite simplemente anotar su modelo para definir el comportamiento del filtro.

Ambos métodos se describen por quién más, Brad Wilson, en este blog post.

+0

Gracias @bhamlin, he considerado los atributos para dividir mis submodelos. Esto incluso podría invocar la emocionante perspectiva de desarrollar un proveedor de metadatos XML personalizado para poder usar un diseñador para administrar los metadatos. Muy artículo puntero, gracias. – ProfK

Cuestiones relacionadas