Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在_Layout中访问会话而不必担心它已过期

如何在_Layout中访问会话而不必担心它已过期
EN

Stack Overflow用户
提问于 2016-02-22 10:26:14
回答 2查看 361关注 0票数 1

我正在使用ASP.NET核心和标识3。

当我登录时,我读取当前select用户界面模板,并在我的_Layout.cshml文件中基于该模板加载css

用户可以更改他的主题,我通过控制器将其存储在会话变量中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public IActionResult ChangeTheme(int id, string returnUrl)
{
    HttpContext.Session.SetInt32("Template", (id));
    return Redirect(returnUrl);
}

与每次加载cshtml查询数据库不同,我将模板放在会话变量中,在Layout.cshtml中根据模板呈现不同的css。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        switch (template)
        {
            case (int)TemplateEnum.Template2:
                <text>
                <link rel="stylesheet" href="~/css/template1.css" />
                </text>
                break;
            case (int)TemplateEnum.Template2:
                <text>
                <link rel="stylesheet" href="~/css/template2.css" />
                </text>
                break;
        {

我想知道如果会议结束了会发生什么。

  1. 考虑到这一点,我访问我的_Layout.cshtml中的值,如果它变为null,并且在呈现新页面之前立即从db加载它,那么它就在那里了。
  2. 既然我使用了标识3,那么声明可能是一个更好的选择吗?我以前没用过。我上面的例子的代码是什么?
  3. 另一个更适合我的方案?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-22 13:35:19

我没有每次加载cshtml来查询数据库,而是将模板放在会话变量中,并在Layout.cshtml中根据模板呈现不同的css。

如果访问数据库是您唯一关心的问题,并且您已经抽象了您的存储库(或者用户存储库,如果您将它存储在标识类型上),那么您可以使用装饰器模式来实现本地缓存。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public interface IUserRepository
{
    string GetUserTheme(int userId);
    void SetUserTheme(int userId, string theme);
}

public class CachedUserRepository : IUserRepository
{
    private readonly IMemoryCache cache;
    private readonly IUserRepository userRepository;
    // Cache Expire duration
    private static TimeSpan CacheDuration = TimeSpan.FromMinutes(5);

    public CachedUserRepository(IUserRepository userRepository, IMemoryCache memoryCache)
    {
        if (userRepository == null)
            throw new ArgumentNullException(nameof(userRepository));

        if (memoryCache == null)
            throw new ArgumentNullException(nameof(memoryCache));

        this.userRepository = userRepository;
        this.cache = memoryCache;
    }

    public string GetUserTheme(int userId)
    {
        string theme;

        // adding a prefix to make the key unique
        if (cache.TryGetValue($"usertheme-{userId}", out theme))
        {
            // found in cache
            return theme;
        };

        // fetch from database
        theme = userRepository.GetUserTheme(userId);

        // put it into the cache, expires in 5 minutes
        cache.Set($"usertheme-{userId}", theme, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = CacheDuration });

        return theme;
    }

    public void SetUserTheme(int userId, string theme)
    {
        // persist it
        userRepository.SetUserTheme(userId, theme);


        // put it into the cache, expires in 5 minutes
        cache.Set($"usertheme-{userId}", theme, new MemoryCacheEntryOptions { AbsoluteExpirationRelativeToNow = CacheDuration });
    }
}

问题是,在默认的ASP.NET核心DI系统中,不存在对装饰器的内置支持。您必须使用第三方IoC容器(Autofac、StructureMap等)。

你当然可以这样注册

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    services.AddScoped<IUserRepository>(container => {
        return new CachedUserRepository(container.GetService<UserRepository>(), container.GetServices<IMemoryCache>());
    });

但这有点麻烦。否则,将其存储在一个长期存在的cookie中,它的优点是,当用户未登录时,主题仍然处于活动状态,并且您可以在用户登录时设置cookie。

票数 1
EN

Stack Overflow用户

发布于 2016-02-22 12:06:26

如果您愿意,当然可以将主题存储在用户的标识中,但是无论何时更新主题,您都必须辞职。

你会做这样的事情:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
userManager.AddClaimAsync(user, new Claim("Template", id+""));
signInManager.SignInAsync(user);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35561070

复制
相关文章
Jupyter Notebook 更改主题
Customize your Jupyter Notebook Theme in 2 lines of code
莫听穿林
2022/02/16
8210
Jupyter Notebook 更改主题
更改WordPress主题全局字体
加入以下自定义CSS即可 /* 您可以在此处加入您的CSS。 点击上方的帮助图标来了解更多。 */ /*字体设定*/ *:not([class*="icon"]):not(i) { font-family: "Helvetica Neue", "Luxi Sans", "DejaVu Sans", Tahoma, "Hiragino Sans GB", "Microsoft Yahei", sans-serif !important; } /*字体阴影*/ *{text-shadow: 0
回忆大大
2021/08/09
1.2K0
更改WordPress主题全局字体
pycharm 风格_python主题更改
下载好的插件是一个zip文件,在pycharm的Plugins栏中选择install plugins from disk,选择插件后重启即可
全栈程序员站长
2022/09/27
7690
pycharm 风格_python主题更改
WordPress 3.4 发布:自定义主题变得更加容易
WordPress 发布了 3.4 版本,这个版本显著改善了 WordPress 的主题定制功能,自定义头部,以及图片标题等方面。
Denis
2023/04/14
2560
WordPress 3.4 发布:自定义主题变得更加容易
wordpress子比主题更改首页样式全宽度[美化教程]
在主题目录下“func.php”下面添加下面代码,这是我修改后的“图文封面卡片”小工具
七辰
2023/10/06
1.7K0
wordpress子比主题更改首页样式全宽度[美化教程]
更改Linux终端颜色主题【Linux-Command line】
如果你一整天都盯着终端,自然想让它变得赏心悦目。 对美的判断因人而异,自CRT串行控制台问世以来,终端已经走了很长一段路。 因此,很有可能你的软件终端窗口中有很多选项可以使你看到的内容主题化,不管你如何定义美。
QRosie
2019/11/24
9K0
更改Linux终端颜色主题【Linux-Command line】
gnome extensions 推荐 (fedora 28 常用gnome 插件备份)
当我们进行重新安装系统(fedora 28)的时候,需要初始安装一些 gnome 插件,来进行完善我们的使用。
西湖醋鱼
2020/12/30
3.8K0
安装Gnome桌面
sudo add-apt-repository ppa:tualatrix/ppa sudo apt-get install -f gnome-panel gnome gnome-shell gnome-menus gnome-session gdm
JNingWei
2018/09/28
4.4K0
【Matlab】MATLAB编辑器主题颜色更改(MATLAB Schemer)
MATLAB是一款好用的代码编辑器,但其默认的主题背景色是“刺眼的白色”,对于经常使用MATLAB工作的童鞋来说很不友好。其他的代码编辑器如VS Code、Pycharm都有黑色背景主题设置。
DevFrank
2024/07/24
1.2K0
【Matlab】MATLAB编辑器主题颜色更改(MATLAB Schemer)
ubuntu 手工安装gnome extensions
首先查看gnome shell 的version gnome-shell --version GNOME Shell 3.28.4 下载对应的版本。 查看这个扩展的uuid: unzip -c ./openweather-extension@jenslody.de.v94.shell-extension.zip metadata.json | grep uuid | cut -d \" -f4 # openweather-extension@jenslody.de 进入目录安装扩展 mkdir -p ~/.
超级大猪
2019/12/20
2.4K0
技术|使用 Ansible 管理你的工作站:配置桌面设置
在本系列第三篇(也是最后一篇)文章中,我们将使用Ansible自动化配置GNOME桌面设置。
知忆
2021/07/06
8390
使用 Ansible 管理你的工作站:配置桌面设置
在本系列第三篇(也是最后一篇)文章中,我们将使用 Ansible 自动化配置 GNOME 桌面设置。
星哥玩云
2022/07/28
5760
Ubuntu14.04 gnome3下gedit首选项消失如何修改gedit主题
该文章介绍了在Ubuntu 14.04下使用gnome3遇到的问题以及解决方案。主要包括忘记选择引导设备导致硬盘被格式化的问题,以及使用easyBCD设置启动项进入Ubuntu后出现Grub error: unknown filesystem的问题。文章还介绍了如何手动更改引导文件,以及更改主题和显示行号的方法。
Alan Lee
2018/01/02
2K0
Ubuntu14.04 gnome3下gedit首选项消失如何修改gedit主题
这款Typora主题惊艳到了我
typora相信大家都用过,很多人习惯了typora默认的github主题,但我今天看到一个主题。说实话激起了我要设计自己的一款主题的欲望。就有了今天的这个主题。
徐建国
2021/12/22
1.4K0
这款Typora主题惊艳到了我
博客园美化,更改外部主题,自定义JavaScript
在之前,我一直以为博客园他是那种万年不变的老旧风格,看着就有一种年代感,但是,昨天我莫名看到一个项目,我尝试进行了美化后,发现这玩意很好看啊。
JanYork_简昀
2022/05/18
1.2K0
博客园美化,更改外部主题,自定义JavaScript
扶我起来,前端还没倒下,我不能睡
长路漫漫,唯夜作伴。虽然一天的工作头昏脑胀,但是仍然放不下我心心念念的前端啊,扶我起来,我还可以学~
小闫同学啊
2019/12/17
8300
使用GNOME Tweaks工具定制Linux桌面的10种方法
您可以通过多种方法来调整Ubuntu,以自定义其外观和行为。 我发现最简单的方法是使用GNOME Tweaks Tool(GNOME优化工具)。 它也被称为GNOME调整或简单的调整。GNOME Tweaks 是可以调整 GNOME 的高级选项。
知忆
2021/06/09
4.9K0
Qt设置窗口不能更改大小及程序发布相关
参考:http://blog.sina.com.cn/s/blog_5e42f31a0100y760.html
繁花云
2018/07/31
1.3K0
Qt设置窗口不能更改大小及程序发布相关
WSL安装GNOME桌面教程
下载 VcXsrv Windows X Server download | SourceForge.net 并安装
小N同学
2023/03/16
4.6K0
WSL安装GNOME桌面教程
3.4 队列
1、和栈相反,队列是一种先进先出(FIFO)的线性表。它只允许在表的一端进行插入,而在另一端删除元素。
小林C语言
2019/07/12
2940

相似问题

如何删除Ubuntu 12.04中的gnome 3.4主题

30

我想从toreturn 12.04的gnome 3.6返回gnome 3.4

10

如何手动更改GNOME主题?

10

Gnome shell主题自动更改

10

Gnome-Shell 3.4主题在12.04中不起作用?

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文