我如何在MVC3的Razor页面上使用枚举?

本文关键字:枚举 Razor MVC3 | 更新日期: 2023-09-27 18:01:36

我声明了一个enum:

public enum HeightTypes{    Tall,    Short}

现在我想在我的剃刀页面上使用它,像这样:

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

但是有一个问题,当我得到一个错误。有什么办法能让我把我的enum告诉剃刀页吗?

我如何在MVC3的Razor页面上使用枚举?

你的枚举声明中有一个错误(删除末尾的;):

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)
{
}

但是为了避免在所有需要使用此enum的剃刀视图中这样做,在~/Views/web.config中的<namespaces>部分声明它更容易:

<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>

给出一个从头到尾的例子:

c# CS Page

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

Razor视图

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

您没有具体说明异常,所以我猜测这是名称空间问题。添加

@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" />