【问题标题】:Razor page namespace conflicts with class libraryRazor 页面命名空间与类库冲突
【发布时间】:2020-04-14 21:04:31
【问题描述】:

我有一个带有 MyApp.Pages.MyClass 之类命名空间的剃须刀页面。在此页面 cshtml 中,我试图引用类库中的枚举,其命名空间为 MyClass.Enums.MyEnum。我找不到引用此枚举类型的方法,因为它使用完全限定的命名空间(或尝试添加 using 子句)都导致“类型或命名空间不存在”错误,因为它将 MyClass.Enums.MyEnum 视为相对于当前命名空间MyApp.Pages.MyClass。有没有一种方法可以在不重命名所涉及的命名空间的情况下引用枚举类型?

【问题讨论】:

  • 您可以添加:using MyEnum = MyClass.Enums.MyEnum 并在 html 中使用它,例如 MyEnum.Name
  • 这不起作用,因为 using 子句会产生相同的错误 - 它试图将 MyClass.Enums.MyEnum 解析为相对于当前命名空间,因为它以 MyClass 开头,而当前命名空间以 @ 结尾987654329@.
  • 是的,我明白了,你可以添加整个路径吗?
  • 那些是完整的路径。
  • 嗨@MarkGuerrieri,关于此案的任何更新?

标签: c# asp.net-core namespaces razor-pages


【解决方案1】:

我有一个带有类似MyApp.Pages.MyClass 命名空间的剃须刀页面。在此页面 cshtml 中,我试图引用类库中的枚举,其命名空间类似于 MyClass.Enums.MyEnum

导致“类型或命名空间不存在”错误

如果我们将页面模型类命名为MyClass,而不是MyClassModel,则可以重现同样的问题。

namespace MyApp
{

    public class MyClass : PageModel

MyClass.cshtml页面和错误如下。

要修复它,您可以重命名页面模型类,例如MyClassModel 等。

您还可以尝试另一种方法来创建和使用嵌套命名空间,如下所示。

namespace MyApp
{
    namespace MyAppNestedNamespace
    {
        public class MyClass : PageModel
        {
            public void OnGet()
            {
                
                //...
            }

            //...
        }
    }

}

MyClass.cshtml 页面可能如下所示:

@page
@model MyAppNestedNamespace.MyClass

@using MyClass.Enums

@{
    ViewData["Title"] = "MyClass";
}

<h1>MyClass</h1>

@*your code here*@

【讨论】:

    【解决方案2】:

    只需取消对全局命名空间的引用:

        using MyEnum = global::MyClass.Enums.MyEnum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      相关资源
      最近更新 更多