2011-07-10 48 views
11

I declaró una enumeración:¿Cómo puedo usar Enums en mi página Razor en MVC3?

public enum HeightTypes{ Tall, Short} 

Ahora quiero usarlo en mi página de la maquinilla de afeitar de esta manera:

@if (Model.Meta.Height == HeightTypes.Tall) 

Pero hay un problema, ya que me da un error. ¿Hay alguna forma en que pueda decirle a la página de afeitar sobre mi enum?

+0

Por favor, sea específico acerca del error. Mensaje exacto copiado textualmente del compilador/IDE, preferiblemente. –

Respuesta

16

Usted tiene un error en su declaración de enumeración (quitar el ; final):

public enum HeightTypes { Short = 0, Tall = 1 } 

continuación, la siguiente prueba debería funcionar:

@if (Model.Meta.Height == HeightTypes.Tall) 
{ 

} 

sólo hay que asegurarse de que su punto de vista es fuertemente tipado y que ha introducido en el ámbito el espacio de nombre en el que se define la enumeración de Altura:

@using SomeAppName.Models 
@model SomeViewModel 

o hacen referencia a la enumeración de esta manera:

@if (Model.Meta.Height == SomeAppName.Models.HeightTypes.Tall) 
{ 

} 

Sin embargo, para evitar hacer esto en todos los puntos de vista de afeitar que requieren el uso de esta enumeración, es más fácil para declarar en la sección <namespaces> en el ~/Views/web.config:

<system.web.webPages.razor> 
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 
    <pages pageBaseType="System.Web.Mvc.WebViewPage"> 
     <namespaces> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="SomeAppName.Models" /> 
     </namespaces> 
    </pages> 
</system.web.webPages.razor> 
+0

Lo siento, simplemente lo corrigí. Me estaba confundiendo. El problema que tengo es realmente, creo, con MVC porque mi vista de afeitar no sabe sobre el espacio de nombres en el que está la enumeración. – RichardA

+0

@Richard, sí, podrías agregar un '@ using' al comienzo de tu vista Razor. –

0

No es específico sobre la excepción, por lo que estoy adivinando esto es un problema de espacio de nombres. Agregue

@using The.Namespace.Of.Your.Enum; 

en la parte superior. También puede especificar los espacios de nombres para añadir automáticamente en /Views/web.config si se va a utilizar ese espacio de nombres mucho:

<system.web.webPages.razor> 
    ... 
    <pages ...> 
     <namespaces> 
      <add namespace="System.Web" /> 
      ... 
      <add namespace="The.Namespace.Of.Your.Enum" /> 
10

Eso sí, dar un ejemplo de principio a fin:

C# CS Página

namespace MyProject.Enums 
{ 
    public enum CurveBasis 
    { 
     Aggregates, 
     Premium 
    } 
} 

Razor Ver

@using MyProject.Enums 

<select id="dlCurveBasis"> 
    <option value="@CurveBasis.Aggregates">Aggregates</option> 
    <option value="@CurveBasis.Premium">Premium</option> 
</select> 
Cuestiones relacionadas