是一个ASP.net MVC查看“类”?

问题描述:

...之前,我只是出于好奇才这样做。这里没有真实世界的应用程序,但只是为了知识和修补... ...是一个ASP.net MVC查看“类”?

ASP.NET视图具有像ModelViewData甚至有方法以及属性。

您甚至可以使用@Using,就像常规的class.cs文件一样。

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

我的主要问题是:是它的一类?

这应该是因为它是一个类型, ..

我应该能还这样做,那么(剃刀引擎):

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

    var p = new Person(); 
} 

<span>@p.Name</span> 

但是我不能。为什么?

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

+1

它是[现在开源](http://weblogs.asp.net/scottgu/archive/2012/03/27/asp-net-mvc-web-api-razor-and-open-source.aspx )所以你现在可以[直接找到](http://aspnetwebstack.codeplex.com/)! – 2012-03-28 22:26:21

+1

技术答案是,视图代码被放入方法体。你不能在那里上课。但是你为什么要在视图中定义类?听起来很可疑。 – CodesInChaos 2012-03-28 22:26:26

+0

@dtryon真棒!谢谢你的好消息:) – 2012-03-28 22:28:40

你不能这样做,因为剃刀的标记是从WebViewPage或WebViewPage <的TModel导出生成的类中编入的语句序列的方法内>

更重要的问题,虽然,这就是为什么你想这样做吗?相反,宁愿让Razor免于这种逻辑 - 它的工作应该是生成布局,而不是执行任何类型的业务逻辑或业务数据转换。在你的动作方法中完成所有繁重的工作,并提供一个模型来描述以只需要简单的Razor标记进行处理的格式来呈现布局所需的数据。

有很多教程围绕如何处理MVC和Razor进行。我挖掘出了这个简短但合理的工作,涵盖了可能有助于您理解的端到端故事。它确实包括使用EF来获取数据以及可能更多的是你讨价还价 - 但值得一读,以获得整个架构如何挂在一起的全貌:http://weblogs.asp.net/shijuvarghese/archive/2011/01/06/developing-web-apps-using-asp-net-mvc-3-razor-and-ef-code-first-part-1.aspx

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

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

当然,你需要使用functions关键字以下降到露出类级别之类的字段,属性,方法和内部类:

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

@{ 
    var p = new Person(); 
} 

<span>@p.Name</span> 

这会工作得很好。

这就是说,请记住,这些内部类的唯一目的是,如果您需要定义仅用于视图内的类型。我自己,我从来没有发现需要这样做的课程。但是,我利用这种技术来添加新的方法,这些方法在语法上与helper方法无关。

+0

哇!从来没有见过'功能'关键字。它编译!谢谢:) – 2012-03-28 22:50:41

+4

@JanCarloViray请考虑切换到这个选定的答案。 – CodeAngry 2014-10-06 03:12:14

+1

@JanCarloViray请注意CodeAngry的建议。 – 2015-12-14 12:14:15