C# ASP.net MVC视图是否为“a”;“类”;?

C# ASP.net MVC视图是否为“a”;“类”;?,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,……首先,我这么做只是出于好奇。这里没有实际应用,只是为了了解和修补 ASP.NET视图具有类似于Model和ViewData的属性,甚至还有方法 您甚至可以像普通的class.cs文件一样使用@Using 我知道它的类型是WebPageView 我的主要问题是:这是一门课吗? 这应该是因为它是一种类型,但是 我应该也能做到这一点(剃须刀引擎): @{ 公共阶层人士 { //等等。。。 } var p=新人(); } @p、 名字 但是我不能。。为什么? 注意:目前是C#,ASP.net初学者

……首先,我这么做只是出于好奇。这里没有实际应用,只是为了了解和修补

ASP.NET视图具有类似于
Model
ViewData
的属性,甚至还有方法

您甚至可以像普通的class.cs文件一样使用
@Using

我知道它的类型是
WebPageView

我的主要问题是:这是一门课吗?

这应该是因为它是一种类型,但是

我应该也能做到这一点(剃须刀引擎):

@{
公共阶层人士
{
//等等。。。
}
var p=新人();
}
@p、 名字
但是我不能。。为什么?


注意:目前是C#,ASP.net初学者。

您不能这样做,因为Razor标记被编译成从WebViewPage或WebViewPage派生的生成类中的方法内的一系列语句

但更重要的问题是,你为什么要这样做?相反,我更愿意让Razor远离这种逻辑——它的工作应该是生成布局,而不是执行任何类型的业务逻辑或业务数据转换。在action方法中完成所有繁重的工作,并交付一个模型,该模型描述了以一种只需要简单的Razor标记即可处理的格式呈现布局所需的数据


这一轮有相当多的教程描述了如何接近MVC和Razor。我找到了这篇简短的文章,但是做了一个合理的工作,涵盖了一个端到端的故事,可能有助于你理解这个想法。它还包括使用EF获取数据,这可能是您想要讨价还价的更多内容,但要全面了解整个体系结构是如何结合在一起的,值得一读:

是的,视图就是类。它们被编译成一个临时程序集(因此它们不能访问主程序集的内部成员,这在处理动态/匿名类型时很好)


我认为Razor有一个规则,不允许声明内部类,但没有检查。

当然,您需要使用
函数
关键字,以便向下显示类级别的内容,如字段、属性、方法和内部类型:

@functions {
   public class Person
   {
       public string Name { get; set; }
   }
}

@{
   var p = new Person();
}

<span>@p.Name</span>
@函数{
公共阶层人士
{
公共字符串名称{get;set;}
}
}
@{
var p=新人();
}
@p、 名字
这就行了


也就是说,请记住,这些内部类的唯一用途是定义仅用于视图的类型。就我自己而言,我从来没有发现有必要在课堂上这样做。但是,我利用这项技术添加了新方法,这些方法在语法上不可能与
helper
方法一起使用。

现在您就可以使用它了!技术上的答案是,视图代码被放入方法体中。你不能在那里上课。但是为什么要在视图中定义类呢?听起来很可疑。@dtryon真棒!!谢谢你的好消息:)@CodeInChaos谢谢。如果你能在这里详细说明一下,作为回答,我会很高兴的。。。我知道这没有什么用处,但我只是想进一步理解它。@CodeInChaos,
函数
关键字呢?哇!以前从未见过
函数
关键字。它确实可以编译!谢谢:)JANCARLVIEAY请考虑将选择的答案切换到这一点。
@functions {
   public class Person
   {
       public string Name { get; set; }
   }
}

@{
   var p = new Person();
}

<span>@p.Name</span>