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

23

我声明了一个枚举:

public enum HeightTypes{    Tall,    Short}

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

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

但是出现了一个问题,我收到了一个错误。有没有办法告诉 Razor 页面我的枚举类型?


请具体说明错误。最好从编译器/IDE中直接复制粘贴错误信息。 - Marc Gravell
3个回答

26

您的枚举声明中存在错误(请删除末尾的;):

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

}

但是为了避免在所有需要使用此枚举的 Razor 视图中执行此操作,更容易地将其声明在 ~/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>

抱歉,我刚才纠正了一下。我有些混淆了。我遇到的问题实际上是与MVC有关的,因为我的Razor视图不知道枚举所在的命名空间。 - RichardA
@Richard,是的,你可以在Razor视图的开头添加一个@using - Darin Dimitrov

15

以下是一个从头到尾的示例:

C# CS页面

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>

1

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接