为什么命名空间/导入在c#和Razor之间的工作方式不同?

时间:2013-11-26 19:25:29

标签: c# asp.net-mvc razor namespaces

我和同事注意到Razor和导入名称空间有些奇怪。

这是我们的测试类,我们将尝试从c#文件和Razor视图访问。

namespace test
{
    public class c1 {}
}

namespace test.sub
{
    public class c2 {}
}

这是我们的c#代码示例。

using test;

namespace test
{
    public class testbed
    {
        testbed()
        {
            c1 o1 = new c1();                   //works
            test.sub.c2 o2 = new test.sub.c2(); //works
            sub.c2 o3 = new sub.c2();           //works
        }
    }
}

这是我们Razor代码的示例。 “sub”命名空间不可访问。

@using test
@(new c1())          @* Works *@
@(new test.sub.c2()) @* Works *@
@(new sub.c2())      @* Cannot be seen *@

有没有人解释为什么它在我们的类文件中有效但在我们的视图中没有?

1 个答案:

答案 0 :(得分:5)

sub.c2适用于您的代码,因为您处于命名空间" test"。将命名空间更改为titi,您将看到它无法正常工作

namespace titi
{
    using test;

    public class testbed
    {
        testbed()
        {
            c1 o1 = new c1();                   //works
            test.sub.c2 o2 = new test.sub.c2(); //works
            sub.c2 o3 = new sub.c2();           //don't work
        }
    }
}

namespace test
{
    using test;

    public class testbed
    {
        testbed()
        {
            c1 o1 = new c1();                   //works
            test.sub.c2 o2 = new test.sub.c2(); //works
            sub.c2 o3 = new sub.c2();           //works because your are in namespace *test*
        }
    }
}

您的剃刀代码位于另一个名称空间中(例如,与test不同),因此sub.c2不起作用。