Как я могу использовать Enums на моей странице Razor в MVC3?

Я объявил перечисление:

public enum HeightTypes{    Tall,    Short}

Теперь я хочу использовать его на моей странице бритвы следующим образом:

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

Но есть проблема, когда я получаю сообщение об ошибке. Есть ли способ сообщить странице бритвы о моем перечислении?

Ответ 1

У вас есть ошибка в объявлении enum (удалить завершающий ;):

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

то следующий тест должен работать:

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

}

вам просто нужно убедиться, что ваше представление строго напечатано и что вы внесли в область видимости пространство имен, в котором определено перечисление высоты:

@using SomeAppName.Models
@model SomeViewModel

или ссылайтесь на перечисление следующим образом:

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

}

Но для того, чтобы избежать этого во всех ваших представлениях бритвы, которые требуют использования этого перечисления, проще объявить его в разделе <namespaces> в ~/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>

Ответ 2

Просто дайте пример от начала до конца:

Страница С# CS

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

Просмотр бритвы

@using MyProject.Enums

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

Ответ 3

Вы не знаете об исключении, поэтому я предполагаю, что это проблема с пространством имен. Добавить

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

вверху. Вы также можете указать пространства имен для автоматического добавления в /Views/web.config, если вы собираетесь использовать это пространство имен много:

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