我刚开始玩 WebPages (Razor),我想出了一些基本概念。首先,我为我构建的每个站点列出了我总是需要的东西:
- 当然是友好的网址(网页为我做)
- 翻译后的网址(网页支持参数,因此易于管理)
- 多模板支持(网页默认不支持,这里需要一些逻辑)
- 每个函数的代码分开以避免重复(WebPages在墙后支持它)
因此,如果您考虑上面的列表,那么好的旧 MVC 模式就会发挥作用。ASP.NET 已经有一个 MVC(3) 框架,它提供了我需要的所有功能。我很清楚。在这个问题上,我试图弄清楚 WebPages 技术是否也是开发大型 MVC(类似)Web 项目的完美平台。
我测试了网页加载行为/网页链,并发现它实际上是由加载的页面和一个或多个嵌套布局构建的链。每个布局页面都有一个指向其加载器(父)页面的指针。
至此,我要理清一些基本概念。由于网页通过物理文件和文件夹(路径)解析 url,因此间接支持翻译的 url,因为我可以使用如下路径创建翻译的文件夹和文件: ..../en/account/register 并且我可以创建另一个路径,例如匈牙利语路径:.../hu/szemelyes/regisztracio。
我所需要的只是分离代码,因为将寄存器逻辑写入两个 .cshtml 文件并不那么优雅。WebPages 支持@helpers 和@functions,因此很容易创建“Account.cshtml”并创建我需要的所有功能。这是对我问题的官方回答。
如果我在某个 .cshtml(帮助程序)文件中写了一个 @function,那么墙后面会发生什么?它为我创建了一个继承 WebPageHelper 的新类。我认为这不太优雅,因为我可以创建自己的类来提供相同的功能。
一些进一步的研究我发现每个页面(和布局页面)默认都继承 WebPage 类。使用@inherits 指令,我可以覆盖默认继承及其完美的方式来创建我自己的从WebPage 派生的类,并且在我的所有.cshtml 文件中,我可以直接从该页面继承。
在这一点上,我可以用比使用@functions 更优雅的方式分离代码(我认为:)。文本翻译呢?我认为这是一种使用资源文件的通用方式,但对于 WebPages,我考虑将文本值存储在普通的 .cshtml 文件中。你怎么看待这件事?
最后是我的 register.cshtml:
@inherits Account.Register
@{
Title = "Please Register"
}
..和我的 regisztracio.cshtml:
@inherits Account.Register
@{
Title = "Kérem regisztráljon"
}
我的 Account.Register 类有一个字符串属性标题:
public class Register : WebPage
{
public String Title { get; set; }
...
}
还有一件事我要说。我的 register.cshtml(以及 regisztracio.cshtml)不包含任何 html 标记。我有一个默认布局文件(_Master.cshtml),并且我的“视图”目录下的每个页面都有另一个布局文件(_Register.cshtml)。我的代码通过我加载的“控制器”类的名称自动加载正确的页面布局文件。所以我的注册类自动加载“_Register.cshtml”布局文件。所有页面布局文件都会自动加载 _Master.cshtml(如果访问者使用移动设备,则为 _Mobile.cshtml),这是主要布局。
所以我认为这是为 WebPages 技术实现的 MVC 模式,同时保持 WebPages 强大的功能,如自动 url 解析。
你怎么看?
所以这是我对网页的基本概念