Как я могу использовать Enums на моей странице Razor в MVC3? - PullRequest
14 голосов
/ 10 июля 2011

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

public enum HeightTypes{    Tall,    Short}

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

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

Но есть проблема, поскольку я получаю ошибку. Можно ли как-нибудь рассказать странице с бритвой о моем перечислении?

Ответы [ 3 ]

20 голосов
/ 10 июля 2011

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

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

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

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

}

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

@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>
11 голосов
/ 24 августа 2012

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

C # CS Page

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

Razor View

@using MyProject.Enums

<select id="dlCurveBasis">
    <option value="@CurveBasis.Aggregates">Aggregates</option>
    <option value="@CurveBasis.Premium">Premium</option>
</select>
0 голосов
/ 10 июля 2011

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

@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" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...