0

这个问题只是一个快速的问题。我在一个页面上有一组链接,它们实际上都指向同一个控制器方法——它们之间的区别在于它们各自向该方法传递了不同的值,因此后续过程略有不同。我碰巧已经定义了一个与传递的可能值相对应的枚举,所以我不假思索地这样做了:

@Url.Action("QueryStepTwo", new { type = QueryType.UserRecords })

并且惊喜地发现没有任何东西获得红色下划线。我点击编译并导航到该页面进行验证,显示 CS0103 的错误消息:“名称 'QueryType' 在当前上下文中不存在”。在编辑器中,QueryType语法突出显示,并且 IntelliSense 在我键入时提供选项列表。

我假设这只是 VS/IntelliSense 有点太聪明并且知道实际页面解析/渲染引擎无法做到的事情的一个例子?将枚举转换为其字符串或 int 值没有帮助,所以我猜这与执行的顺序有关;更具体地说,当 Razor 看到该页面时,枚举已超出范围。有没有办法在这样的 URL 帮助器中使用枚举,尤其是不需要将枚举定义为视图模型成员的方法?我不喜欢到处使用魔线;他们太容易受到拼写错误和愚蠢行为的影响。

4

1 回答 1

2

确保您完全限定了定义此枚举的命名空间:

@Url.Action("QueryStepTwo", new { type = SomeNamespace.QueryType.UserRecords })

或者,如果您不想这样做,您还可以@using 在 Razor 视图的顶部添加指令:

@using SomeNamespace

如果您想为所有 Razor 视图全局执行此操作,您可以将此命名空间添加到<namespaces>节点中~/Views/web.config(不要与 混淆~/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="SomeNamespace" />
      </namespaces>
    </pages>
</system.web.webPages.razor>

就 Razor 视图中的 Intellisense 而言,这不是可以信任的。希望微软会在未来的版本中改进它。

于 2013-02-20T15:13:15.627 回答