ASP.net MVC视图是一个“;类”;

本文关键字:一个 MVC net 视图 ASP | 更新日期: 2023-09-27 18:29:32

。。。首先,我这么做只是出于好奇。这里没有任何现实世界的应用,只是为了了解和修补

ASP.NET视图具有类似ModelViewData的属性,甚至还具有方法。

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

我知道它是WebPageView<TModel>

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

应该是因为它是一个类型,。。

我应该也能做到这一点,然后(Razor引擎):

@{
   public class Person
   {
       //etc...
   }
   var p = new Person();
}
<span>@p.Name</span>

但是我不能。。为什么

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

ASP.net MVC视图是一个“;类”;

当然,您需要使用functions关键字才能下拉到公开类级别的东西,如字段、属性、方法和内部类型:

@functions {
   public class Person
   {
       public string Name { get; set; }
   }
}
@{
   var p = new Person();
}
<span>@p.Name</span>

这会很好用的。

话虽如此,请记住,这些内部类的唯一目的是如果您需要定义一个仅在视图中使用的类型。就我自己而言,我从未发现有必要在课堂上这样做。然而,我已经利用这种技术添加了helper方法在语法上不可能添加的新方法。

您无法执行此操作,因为Razor标记在从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

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

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