2011-04-16 16 views
18

He escrito una ayuda EnumDropDownFor() que quiero usar junto con EditorFor(). Recién comencé a usar EditorFor(), así que estoy un poco confundido acerca de cómo se elige la plantilla.ASP.NET MVC: Utilizando EditorFor() con una plantilla predeterminada para enumeraciones

editor de plantillas

Mi Enum.cshtml es el siguiente:

<div class="editor-label"> 
    @Html.LabelFor(m => m) 
</div> 
<div class="editor-field">  
    @Html.EnumDropDownListFor(m => m) 
    @Html.ValidationMessageFor(m => m) 
</div> 

corto de definir explícitamente la plantilla a utilizar, ¿hay alguna manera de tener una plantilla predeterminada que se utiliza cada vez que una enumeración se pasa a una EditorFor()?

Respuesta

25

Puede consultar la publicación de blog de Brad Wilson sobre el default templates utilizado en ASP.NET MVC. Cuando tiene una propiedad modelo de tipo Enum, es la plantilla de cadena que se está procesando. Por lo que podría personalizar esta plantilla cadena editor de la siguiente manera:

~/Views/Shared/EditorTemplates/String.cshtml:

@model object 
@if (Model is Enum) 
{ 
    <div class="editor-label"> 
     @Html.LabelFor(m => m) 
    </div> 
    <div class="editor-field">  
     @Html.EnumDropDownListFor(m => m) 
     @Html.ValidationMessageFor(m => m) 
    </div> 
} 
else 
{ 
    @Html.TextBox(
     "", 
     ViewData.TemplateInfo.FormattedModelValue, 
     new { @class = "text-box single-line" } 
    ) 
} 

y luego, en su opinión, simplemente:

@Html.EditorFor(x => x.SomeEnumProperty) 
+0

Excelente! Había leído esa publicación pero no me había dado cuenta de que la cadena se usaría de manera predeterminada. ¿Es esta la plantilla que se usa si no puede coincidir con nada más? – ajbeaven

+1

No se puede hacer funcionar, ya que @if (Modelo es Enum) siempre devuelve falso ya que el Modelo es siempre nulo !! .. lo que me estoy perdiendo !! ... muchas gracias. – Hossam

+1

'@if (ViewData.ModelMetadata.ModelType.IsEnum)' se debe usar en lugar de verificar la instancia, para que las nullabes se recojan correctamente. –

Cuestiones relacionadas