2010-10-27 6 views
12

Estoy buscando para crear un editor de plantillas para Object.cshtml para cambiar el comportamiento del método Html.EditorForModel(). No puedo encontrar ningún ejemplo de esto usando Razor. He visto this example usando el motor de visualización MVC2 y WebForm, pero no sé lo suficiente sobre la máquina de afeitar para convertirlo. Incluso un simple ejemplo sería muy útil.Creación de un editor de plantillas object.cshtml con MVC y Razor

Respuesta

21

Sólo voy a hacer la plantilla de visualización y dejar el resto como un ejercicio para el lector :)

@if (Model == null) { 
    <text>@ViewData.ModelMetadata.NullDisplayText</text> 
} else if (ViewData.TemplateInfo.TemplateDepth > 1) { 
    <text>@ViewData.ModelMetadata.SimpleDisplayText</text> 
} else { 
    <table cellpadding="0" cellspacing="0" border="0"> 
    @foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) { 
     if (prop.HideSurroundingHtml) { 
      <text>@Html.Display(prop.PropertyName)</text> 
     } else { 
      <tr> 
       <td> 
        <div class="display-label" style="text-align: right;"> 
         @prop.GetDisplayName() 
        </div> 
       </td> 
       <td> 
        <div class="display-field"> 
         @Html.Display(prop.PropertyName) 
        </div> 
       </td> 
      </tr> 
     } 
    } 
    </table> 
} 
+0

Gracias por esto, pero cuando me pega este código en mi object.cshtml me sale "CS1024 de error: preprocesador grave ctive esperado " – Craig

+2

Doh, su código es correcto. Accidentalmente tuve # Html.EditorForModel() en lugar de @ Html.EditorForModel(). Al menos, su código no se desperdicia y muchos nuevos usuarios de Razor lo verán por primera vez en el futuro. – Craig

+0

Ni siquiera puedo ejecutar Object.cshtml. Lo puse en Views/Shared/EditorTemplates/Object.cshtml ¿Alguna idea? –

0

Esto parece funcionar para Editor de plantillas de de arranque, por favor hágamelo saber de cualquier mejora

Object.cshtml

@if (Model == null) 
{ 
    <text>@ViewData.ModelMetadata.NullDisplayText</text> 
} 
else if (ViewData.TemplateInfo.TemplateDepth > 1) 
{ 
    <text>@ViewData.ModelMetadata.SimpleDisplayText</text> 
} 
else 
{ 
    foreach (var prop in ViewData.ModelMetadata.Properties.Where(pm => pm.ShowForDisplay && !ViewData.TemplateInfo.Visited(pm))) 
    { 
     if (prop.HideSurroundingHtml) 
     { 
      <text>@Html.Editor(prop.PropertyName)</text> 
     } 
     else 
     { 
      <div class="form-group"> 
       @Html.Label(prop.PropertyName, new { @class = "control-label col-md-2", @style = "text-align:right;" }) 
       <div class="col-md-10"> 
        @Html.Editor(prop.PropertyName, null, new { @class = "form-control " }) 
        @Html.ValidationMessage(prop.PropertyName, "", new { @class = "text-danger" }) 
       </div> 
      </div> 
     } 
    } 
} 
Cuestiones relacionadas