如何在MVC3中的Razor页面上使用Enums?

Ric*_*rdA 15 c# asp.net-mvc razor

我宣布了一个枚举:

public enum HeightTypes{    Tall,    Short}
Run Code Online (Sandbox Code Playgroud)

现在我想在我的剃刀页面上使用它,如下所示:

@if (Model.Meta.Height == HeightTypes.Tall)
Run Code Online (Sandbox Code Playgroud)

但是当我收到错误时会出现问题.有什么方法可以告诉剃刀页面关于我的枚举?

Dar*_*rov 21

您的枚举声明中有错误(删除尾随;):

public enum HeightTypes { Short = 0, Tall = 1 }
Run Code Online (Sandbox Code Playgroud)

然后以下测试应该工作:

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

}
Run Code Online (Sandbox Code Playgroud)

您只需要确保您的视图是强类型的,并且您已将定义了Height枚举的命名空间纳入范围:

@using SomeAppName.Models
@model SomeViewModel
Run Code Online (Sandbox Code Playgroud)

或者像这样引用枚举:

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

}
Run Code Online (Sandbox Code Playgroud)

但是为了避免在需要使用此枚举的所有剃刀视图中执行此操作,更容易在以下<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>
Run Code Online (Sandbox Code Playgroud)


Kwe*_*wex 11

只是做一个从头到尾的例子:

C#CS

namespace MyProject.Enums
{
    public enum CurveBasis
    {
        Aggregates,
        Premium
    }
}
Run Code Online (Sandbox Code Playgroud)

剃刀视图

@using MyProject.Enums

<select id="dlCurveBasis">
    <option value="@CurveBasis.Aggregates">Aggregates</option>
    <option value="@CurveBasis.Premium">Premium</option>
</select>
Run Code Online (Sandbox Code Playgroud)