2011-02-11 18 views

Respuesta

8

La siguiente entrada del blog se describe cómo personalizar las plantillas de edición: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-4-custom-object-templates.html

Básicamente hay que añadir un archivo llamado Views\Shared\EditorTemplates\Object.cshtml y poner toda la lógica para visualizar el objeto allí.

+0

Busco la plantilla original, por lo que sólo se puede modificar lo que necesito cambiar en lugar de escribirlo desde el principio, de todos modos creo que sólo voy usa el aspx one y conviértelo en navaja. – ryudice

+7

La plantilla "original" está realmente codificada en System.Web.Mvc.dll por lo que no hay ningún archivo asxc o cshtml que pueda ver. Hacer esas plantillas predeterminadas más disponibles es algo en la lista para MVC 4, aunque no puedo prometer nada. – marcind

4

Cuando @marcind dice que están compilados, las plantillas en sí mismas no están incrustadas, sino que están escritas en código. Por ejemplo, EditorFor llama al TemplateFor que puede llamar al TextAreaExtensions.TextArea o a una de muchas otras extensiones que generan el código que finalmente se emite. Esto puede deberse a que tenemos la opción de eliminar el motor de vista predeterminado y usar algo como nhaml.

La asignación entre los nombres de la plantilla y la función que crea la salida resultante se puede ver en System.Web.Mvc.Html.TemplateHelpers. Vea también System.Web.Mvc.Html.DefaultEditorTemplates.

Lo más parecido que existe en este momento son las plantillas de Webforms que existen en Mvc3Futures que están disponibles en el aspnet.codeplex.com website. Dentro de ella existe una carpeta DefaultTemplates \ EditorTemplates que contiene las plantillas.

Aquí está la plantilla Object.ascx:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> 
<script runat="server"> 
    bool ShouldShow(ModelMetadata metadata) { 
     return metadata.ShowForEdit 
      && metadata.ModelType != typeof(System.Data.EntityState) 
      && !metadata.IsComplexType 
      && !ViewData.TemplateInfo.Visited(metadata); 
    } 
</script> 
<% if (ViewData.TemplateInfo.TemplateDepth > 1) { %> 
    <% if (Model == null) { %> 
     <%= ViewData.ModelMetadata.NullDisplayText %> 
    <% } else { %> 
     <%= ViewData.ModelMetadata.SimpleDisplayText %> 
    <% } %> 
<% } else { %>  
    <% foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => ShouldShow(pm))) { %> 
     <% if (prop.HideSurroundingHtml) { %> 
      <%= Html.Editor(prop.PropertyName) %> 
     <% } else { %> 
      <% if (!String.IsNullOrEmpty(Html.Label(prop.PropertyName).ToHtmlString())) { %> 
       <div class="editor-label"><%= Html.Label(prop.PropertyName) %></div> 
      <% } %> 
      <div class="editor-field"><%= Html.Editor(prop.PropertyName) %> <%= Html.ValidationMessage(prop.PropertyName, "*") %></div> 
     <% } %> 
    <% } %> 
<% } %> 
Cuestiones relacionadas