如何更改 ASP.NET MVC 2 中的主题

2024-01-25

我想要一个选项,其中用户可以从下拉列表中选择他的网站主题,并且该主题适用于该页面[至少]。

我希望在 ASP.NET MVC 2 中完成此操作,而不使用类似 jquery 的框架。

这怎么能实现呢。

我正在使用默认的 Webforms 视图引擎,并且不想为此目的而使用自定义视图引擎。


似乎这不支持开箱即用,但这是我为实现主题所做的操作:

First, I Added the App_Themes folder to my project, and set up a couple of themesenter image description here

然后,我决定尝试尽可能模仿 Web 表单配置文件提供程序,并向 web.config 添加配置文件属性:

<profile>
  <properties>
    <add name="ThemePreference" type="string" defaultValue="Blue" />
  </properties>
</profile>

所以,基本上我想做的是能够在主题更改时从适当的主题文件夹加载不同的 css。我通过实现附加到 UrlHelper 类的辅助方法来做到这一点,以便我可以编写:

<link href="@Url.Theme("~/Content/Site.css")" rel="stylesheet" type="text/css" />

然后,这应该加载适当的主题 Site.css,如果没有找到文件,则返回到 ~/Content/Site.css。

这个助手非常简单:

public static class UrlHelpers
{
    public static string Theme(this UrlHelper url, string u)
    {
        if (u.StartsWith("~")) u = u.TrimStart('~');
        SettingsProperty settingsProperty = ProfileBase.Properties["ThemePreference"];

        return url.Content("~/App_Themes/"+settingsProperty.DefaultValue + u);
    }
}

现在,在此版本的代码中,它只是获取默认值,因此您需要稍微调整代码。但正如您所看到的,这不仅限于 css 文件,还适用于从 .master 文件到图像的所有内容。

更新 - 使用会话而不是配置文件

public static class UrlHelpers
{
    public static string Theme(this UrlHelper url, string u)
    {
        if (u.StartsWith("~")) u = u.TrimStart('~');

        object currentThemeName = null;
        if (url.RequestContext.HttpContext.Session != null)
        {
            currentThemeName = url.RequestContext.HttpContext.Session["ThemePreference"];
        }
        return currentThemeName != null ? url.Content(String.Format("~/App_Themes/{0}{1}", currentThemeName, u)) : url.Content("~"+u);
    }
}

此方法中的返回行检查是否找到 ThemePreference 会话值,然后返回所请求内容的相应 URL,否则它仅返回所请求的内容,不带 App_Theme 前缀。

在 DropDown postmethod 的控制器操作中,您只需执行以下操作:

Session.Add("ThemePreference", whateverValueYouGotFromDropdown);

更新结束

经过一些调整和修复,这应该可以解决问题。

希望它能对一些人有所帮助,尽管这不是一个完整的演练:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何更改 ASP.NET MVC 2 中的主题 的相关文章

  • 以强类型方式获取属性的 [DisplayName] 属性

    再会 我有这样的方法来获得 DisplayName 属性的属性值 直接附加或使用 MetadataType 属性 我在极少数情况下需要使用它 DisplayName 在控制器代码中 public static class MetaDataH
  • FormsAuthenticationTicket.expiration v web.config 值超时

    这是一个 MVC2 网站 我在 FormsAuthentication 票证方面遇到问题 用户超时30分钟后无法重新登录 在测试期间 DateTime Now AddMinutes 30 值设置为 5000 一切正常 但现在已更改为 30
  • EF4:如何使用通用存储库模式?

    我正在尝试通过使用可以子类化的通用存储库来简化现有的存储库 问题是我不知道如何编写一些基类方法 我目前有 public interface IRepository
  • asp.net mvc从视图修改主文件

    我需要从视图文件 aspx 将类属性添加到正文标记 但该标记位于主文件中 如何从视图访问 body 标签 在你的视图输出中你可以添加一个jQuery http api jquery com addClass 执行此操作的客户端脚本将在页面拼
  • PostAuthenticateRequest 多次触发

    我有 Forms 身份验证 需要将自定义对象存储在 HttpContext Current User 和 Thread CurrentPrincipal 中 为此 我监听 PostAuthenticateRequest 事件 然后从数据库读
  • MVC contrib 寻呼机

    我这样使用它 有没有简单的方法来更改呈现的网址 我查找了更多文档 但找不到太多 你到底想改变什么 这是我更改 URL 的方法 Html Pager Model AssetsPagedList First First Last Last Ne
  • Asp.net mvc 表单发布和分页

    我有一个操作方法 搜索 在发布表单时调用该方法 根据表单的发布值 可能有数千个搜索结果 我想逐页显示搜索视图 但如何知道第一次发布的表单值是什么 这样我就可以通过传递页面参数来调用搜索视图 最好的方法是接受系统的无状态性 每次渲染视图时 请
  • Web.Debug.config 和 Web.Release.Config 文件的用途是什么?

    我刚刚升级到 Visual Studio 2010 和 MVC 2 0 我注意到 Web config 附加了两个附加文件 这些文件是否用于指定调试和发布特定设置 以便您不会弄乱主 Web config 如果我在调试和发布 Web conf
  • Asp.net Mvc 2 Display性能问题?

    在我最近使用 Asp net Mvc 2 的项目中 我们发现 DisplayFor 存在性能问题 我不太确定是否是real问题还是我错过了什么 我希望一些 Asp net Mvc Guru 可以向我解释一下 Model public cla
  • 如何使用 jquery 禁用列表框中的多重选择?或者JavaScript?

    我的页面中有一个列表框 td 我需要禁止从列表框中选择多个项目吗 我正在做一些事情 比如选择一个项目 然后单击 删除 按钮 我的页面会从列表框中删除一项 但是如果我选择多个项目 则会抛出一条错误消息 任何人都可以帮我解决如何停用或禁用列表框
  • jQuery Ajax 发布 - 404 错误

    我正在发布到 ActionMethod 以检索一些客户计数 该帖子在我的本地机器上运行良好 当部署到另一台服务器时 它会抛出 404 错误 我的帖子如下 我不知道为什么这已经停止工作了 var urlStr Items ItemCount
  • knockout.js 将表单加载到 viewModel 中

    我目前正在成功使用 knockout js 来处理应用程序中的所有数据绑定 但是 在每个页面加载时 在我的 document ready 中 我正在执行初始异步数据加载 如下所示 document ready getData 但是 是否可以
  • ASP.NET MVC 区域中的自定义错误覆盖

    我想要 MVC 区域特有的自定义错误页面 不幸的是 Web config 覆盖系统似乎没有考虑 MVC 文件夹结构 如果我想覆盖一个名为 mobile 的区域 我必须创建一个名为 mobile 的根项目文件夹 包含视图和控制器 并将 Web
  • 在 mvc3 中将下拉列表的选定值从视图传递到控制器?

    我有 mvc3 Web 应用程序 我使用了 EF 并从数据库填充了两个下拉列表 现在 当我从这些下拉列表中选择值时 我需要在网络网格内显示它们 我怎样才能做到这一点 using Html BeginForm Html ValidationS
  • 企业库验证块的 Asp.Net MVC 2 客户端验证实现

    我找到了一个非常好的文章 http bradwilson typepad com blog 2009 10 enterprise library validation example for aspnet mvc 2 html关于如何在 M
  • .NET MVC:调用 RedirectToAction 传递模型?

    我有一个观点List aspx与班级绑定的Kindergarten 在控制器中 public ActionResult List int Id Kindergarten k from k1 in kindergartensRepositor
  • 如何在迭代器内使用 Html.DisplayFor ?

    I am lovingMVC 2 整个事情非常适合网络 然而 有一项功能我无法从Html DisplayFor 功能 lt Page Inherits ViewPage
  • asp.net mvc 镜像路径和虚拟目录

    我知道这必须是重复的 但我一直在翻阅大量有关此的信息 但无法使其发挥作用 我正在尝试让一个网站在客户端的服务器上运行 并且他们将该网站安装在虚拟目录中 我本地没有这个设置 所以我在这里盲目飞行 我正在尝试建立一条通往图像的路径 用于 Fac
  • 视图“~/Views/Login/Login.aspx”必须派生自 ViewPage、ViewPage、ViewUserControl 或 ViewUserControl

    因此 我在 ASP NET mvc2 解决方案上遇到此错误 该解决方案曾经工作正常 我必须安装 Visual Studio 2012 但磁盘空间不足 因此必须手动卸载一些 Visual Studio 2010 功能 但目前看来并非完全必要
  • ASP.NET MVC 2 - 使用 UpdateModel 和 LINQ to Entities (.NET 3.5) 时“无法更新类型‘XYZ’的模型”

    我有一个使用 LINQ to Entities 设置的模型 并且代码可以按预期添加到数据库中 但是 当我使用 NET 3 5 时 我无法让 UpdateModel 工作 HttpPost public ActionResult Edit S

随机推荐