在剃刀网页中使用主题助手

网站剥皮是一个由Web应用程序用户可以使用精选准备的主题或皮肤来个性化他们的体验的概念。每个主题或皮肤可能提供不同的设计或内容或两者。 ASP.NET Web表单已包含自版本2.0以来的全面主题框架。 WebMatrix开发人员可以通过包管理器提供的ASP.NET Web服务器库包中找到主题管理功能。本文介绍了主题助手的工作原理。

在最基本的基本情况下,主题可以纯粹由专用的CSS样式表组成。它还可以包括单独的布局页面,主题部分或部分页等。 Heares Helper需要将文件夹指定为您网站内的主题目录。每个单独的主题都需要它在该目录中的自己的文件夹。这在下图中示出了显示名为的文件夹"Themes"(它不必以这种方式命名,但它有意义)其中有四个进一步的文件夹 - 蓝色,绿色,红色和白色。这些文件夹中的每一个都代表一个单独的主题。主题从文件夹名称获取其名称。

下一个图像显示这些文件夹扩展以显示不同主题特定的子文件夹。

主题 are activated through the 主题.Initialize() 方法。这需要两个参数:表示主题目录的字符串,以及默认主题的名称。以上图为例所示,这是如何用默认主题初始化主题"White":

@{
    主题.Initialize("~/Themes/", "白色的");
}

此代码最好放在_appstart.cshtml中,因为它在第一次运行应用程序时执行。一旦主题已经跨进了,可以使用许多属性和方法。显然,这是 themeDirectory. 财产将返回"Themes",正如刚刚设置的那样。这 当前段 财产将返回"White"此刻,就像那样 defaulttheme. 财产。这 可用性 财产返回A. ReadonlyCollection.<string>,包含"Blue", "Green", "Red" and "White"。由于迭代文件夹,因此填充此属性 themeDirectory.,并抓住他们的名字。主题类别有一个成员 - 一种调用的方法 getresourcepath.。此方法有两个过载:一个人接受表示相关主题文件夹中文件名的字符串;另一个接受表示主题文件夹中的子文件夹的字符串,以及表示文件名的另一个字符串。所有这些都在示例应用程序中进行说明,可用于从文章末尾的链接下载。

示例应用程序中的白色主题纯粹在白色主题文件夹中的“布局文件夹中的简单布局”页面中组成:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>主题 Helper</title>
    </head>
    <body>
        @Helpers.ThemePicker()
        @RenderBody()
    </body>
</html>

除了样式表引用之外,红色和绿色主题将使用完全相同的布局页面。这是红色主题布局页面:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>主题 Helper</title>
        <link href="@主题.GetResourcePath("Styles", "红色的.css")" rel="stylesheet" type="text/css" />
    </head>
    <body>
        @Helpers.ThemePicker()
        @RenderBody()
    </body>
</html>

注意使用的使用 主题.GetResourcePath 在红色主题的样式文件夹中定位特定主题CSS文件的方法。蓝色布局包括对称为部分页面的额外引用 _special.chtml.:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>主题 Helper</title>
        <link href="@主题.GetResourcePath("Styles", "蓝色的.css")" rel="stylesheet" type="text/css" />
    </head>
    <body>
        @Helpers.ThemePicker()
        @RenderPage(主题.GetResourcePath("Partials", "_special.chtml."))
        @RenderBody()
    </body>
</html>

所有这些布局都包括调用呼叫的方法调用 themepicker.,这是用户可以切换主题的机制。这只是一个简单的形式,由下拉列表组成:

@helper themepicker.(){
    var themes = 主题.AvailableThemes.Select(t => new SelectListItem. {
        Value = t, 
        Text = t, 
        Selected = t == 主题.CurrentTheme ? true : false
    });
    <div>
        <form method="post" action="">
            Current Theme: @Html.DropDownList("这me", "Choose Theme", themes) 
            <input type="submit" value="Change theme" />
        </form>
    </div>
}

这个帮手利用了 在上一篇文章中讨论的DropDownList HTMLHelper。 LINQ到对象用于转换 ReadonlyCollection.可用性 到A. Ienumerable.<SelectListItem.> 对于DropdownList帮助者。 _pageStart.cshtml包含处理表单提交的代码:

@{
    if(IsPost && !Request["这me"].IsEmpty()){
        主题.CurrentTheme = Request["这me"];
    }
    Layout = 主题.GetResourcePath("Layouts", "_Layout.cshtml");
}

当前段 根据发布的值设置,当前主题的正确布局页面位于 getresourcepath. 方法。您可以看到在下面的图像中更改所选主题的结果。

本文中的示例应用程序的源代码是 可用.