剃刀页面名称空间与类库冲突

时间:2020-04-14 21:04:31

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

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

2 个答案:

答案 0 :(得分:0)

我有一个剃刀页面,其命名空间为MyApp.Pages.MyClass。在此页面的cshtml中,我试图引用类库中具有诸如MyClass.Enums.MyEnum之类的命名空间的枚举。

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

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

namespace MyApp
{

    public class MyClass : PageModel

MyClass.cshtml页中,错误如下。

enter image description here

要解决此问题,您可以重命名页面模型类,例如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*@

答案 1 :(得分:0)

只需取消引用全局名称空间即可:

    using MyEnum = global::MyClass.Enums.MyEnum