是ASP.net MVC查看"类"吗?

Jan*_*ray 10 c# asp.net asp.net-mvc razor

......在所有事情之前,我只是出于好奇而这样做.这里没有任何真实的应用程序,只是为了知识和修修补补......

ASP.NET视图具有类似性质ModelViewData,甚至有方法为好.

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

我知道它是类型的 WebPageView<TModel>

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

它应该是因为它是一种类型, ..

我应该也可以这样做(Razor引擎):

@{
   public class Person
   {
       //etc...
   }

   var p = new Person();
}

<span>@p.Name</span>
Run Code Online (Sandbox Code Playgroud)

但是我不能......为什么?

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

Kir*_*oll 12

当然,您需要使用functions关键字来下拉以暴露类级别的东西,如字段,属性,方法和内部类型:

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

@{
   var p = new Person();
}

<span>@p.Name</span>
Run Code Online (Sandbox Code Playgroud)

这将工作得很好.

话虽如此,请记住,这些内部类的唯一目的是,如果您需要定义仅在视图中使用的类型.我自己,我从未发现需要为课程这样做.但是,我利用这种技术来添加方法在语法上不可能的新helper方法.

  • @JanCarloViray请考虑将所选答案切换为此答案. (4认同)

Jam*_*rld 5

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

但更重要的问题是,你为什么要这样做呢?而宁愿让Razor摆脱这种逻辑 - 它的工作应该是制作布局,而不是做任何业务逻辑或业务数据转换.在您的操作方法中执行所有繁重工作,并提供一个模型,该模型描述以仅需要简单的Razor标记处理的格式呈现布局所需的数据.

一轮中有很多教程描述了如何处理MVC和Razor.我挖出了一个简短的但是能够合理地完成一个可以帮助你理解这个想法的端到端故事.它确实包括使用EF获取数据,这可能是你讨价还价的更多 - 但是值得一读,以全面了解整个架构如何挂起:http://weblogs.asp.net/shijuvarghese/存档/ 2011/01/06 /显影web的应用程序-使用-ASP净MVC -3-剃刀和-EF-代码先部分1.aspx


Mic*_*tum 5

是的,视图是课程.它们被编译成一个临时程序集(因此它们无法访问主程序集的内部成员,这在处理动态/匿名类型时很有用).

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