0

我刚开始玩 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 解析。

你怎么看?

所以这是我对网页的基本概念

4

1 回答 1

0

我敢肯定,当您更多地接触该框架时,您将结合其他实践。至于语言翻译,您可以使用文化设置以及资源文件。您可以根据查询参数通过 global.asax 设置当前的文化设置。

初始化区域性设置的示例:

CultureInfo ci = new CultureInfo("en-US");
Thread.CurrentThread.CurrentCulture = ci;
Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(ci.Name);

然后,您的解决方案将无缝地使用资源字符串而不是文字字符串,从而使您的代码更清晰和强类型。在您的情况下,它还可以避免有两个单独的注册视图。

@inherits Account.Register
@{
    Title = StringsResource.RegisterTitle
}

根据文化设置,Title 变量将包含“请注册”文本或“Kérem regisztráljon”。

祝你好运!

于 2012-05-22T17:46:13.067 回答