......在所有事情之前,我只是出于好奇而这样做。这里没有真实世界的应用,只是为了知识和修补......
ASP.NET视图具有Model
和ViewData
等属性,甚至还有方法。
您甚至可以像常规 class.cs 文件一样使用@Using
。
我知道它的类型为WebPageView<TModel>
我的主要问题是:是一类吗?
应该是因为它是一种类型,但是 ..
我应该能够做到这一点(Razor引擎):
@{
public class Person
{
//etc...
}
var p = new Person();
}
<span>@p.Name</span>
但我不能......为什么?
注意:目前是C#,ASP.net初学者。
答案 0 :(得分:12)
当然,您需要使用functions
关键字来下拉以显示类级别的内容,如字段,属性,方法和内部类型:
@functions {
public class Person
{
public string Name { get; set; }
}
}
@{
var p = new Person();
}
<span>@p.Name</span>
这样可以正常工作。
话虽如此,请记住,这些内部类的唯一目的是,如果您需要定义仅在视图中使用的类型。我自己,我从未发现需要为课程这样做。但是,我利用这种技术添加了helper
方法在语法上不可能的新方法。
答案 1 :(得分:5)
你不能这样做,因为Razor标记被编译成从WebViewPage或WebViewPage&lt; TModel&gt;
派生的生成类中的方法内的一系列语句更重要的问题是,你为什么要这样做?而宁愿让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
答案 2 :(得分:5)
是的,视图是课程。它们被编译成一个临时程序集(因此它们无法访问主程序集的内部成员,这在处理动态/匿名类型时很有用)。
我认为Razor有一个规则,不允许声明内部类,没有检查。