在 ASP .NET MVC 5 中动态更改 LAYOUT 或 STYLESHEET

Posted

技术标签:

【中文标题】在 ASP .NET MVC 5 中动态更改 LAYOUT 或 STYLESHEET【英文标题】:Change LAYOUT or STYLESHEET dynamically in ASP .NET MVC 5 【发布时间】:2016-05-30 21:00:39 【问题描述】:

我正在用 ASP .NET MVC 5 开发 Web 应用程序,我需要有一些按钮来改变布局中的样式(另一个 .css 文件)。 我已经尝试过 jQuery + COOKIES 解决方案 - 它可以工作,但在页面加载时仍有其他样式可见。

在 MVC 5 中有没有其他(更好的)解决方案来解决这个问题?不需要 COOKIES(当用户返回默认样式时可以加载)。单击某个按钮后,所有页面将使用第二种样式,然后再次单击默认样式将再次使用。也许通过使用一些路由属性或类似的东西。

非常感谢您的每一个建议!

【问题讨论】:

您使用的是缩小还是捆绑?为了避免客户端缓存一个简单的查询字符串,在 url 末尾带有一个随机值或时间戳,就足以避免客户端的缓存问题。 style.css?version=3.2 【参考方案1】:

这只是一种方式 - 取决于更改的范围(或不):利用sections

您通常会在样板文件中显示@section,它们是您想要从View“注入”的任何内容的“占位符”。

例子:

Views/Shared/_Layout.cshtml<head /> 中定义一个可选的Section

<title>@ViewBag.Title</title> 

<!--this could be your "base" style-->
@Styles.Render("~/Content/css")

 <!--this could be your "override" style-->
@RenderSection("OverrideStyles", false)

View_ViewStart 中(这样您就可以在一个地方设置多个视图的样式)根据需要使用它

@section OverrideStyles

    @if (DateTime.Now.Second % 2 == 0) //Some expression or some value from controller....
    
        <style>
            div.jumbotron h1 
                color: #ff0000;
            
        </style>
    
    else
    
        <link rel="stylesheet" type="text/css" href="//cdn.sstatic.net/***/all.css?v=693004a3f56e">
    


<div class="jumbotron">
    <h1>ASP.NET</h1>
    <p class="lead">ASP.NET is a free web framework for building great Web sites and Web applications using HTML, CSS, and javascript.</p>
    <p><a href="http://asp.net" class="btn btn-primary btn-lg">Learn more &raquo;</a></p>
</div>

您可以从那里扩展 - 如果需要,甚至可以动态设置整个 _Layout..

例如_ViewStart.cshtml

@
    if (DateTime.Now.Second % 2 == 0)
    
        Layout = "~/Views/Shared/_Layout.cshtml";
    
    else
    
        Layout = "~/Views/Shared/_Layout-bar.cshtml";
    


第...

【讨论】:

【参考方案2】:

最后,我使用 HttpContext.Session 属性将用户选择的样式信息保存在 Controller 中,并根据此 Session 存储的信息呈现正确的样式。

但非常感谢您的所有回答!

【讨论】:

我在做同样的事情,但将配置注入剃须刀页面,你是否使用 jquery 做 urs,我想知道这是否是更好的解决方案,你应该真正展示你如何解决它的示例,而不仅仅是帮助他人的描述。

以上是关于在 ASP .NET MVC 5 中动态更改 LAYOUT 或 STYLESHEET的主要内容,如果未能解决你的问题,请参考以下文章

markdown ASP NET MVC转换模式desde la vista一个JSON

ASP.NET MVC 3 上的移动访问者的动态布局?

vbscript ASP NET MVC - Pasar un viewbag del controlador a la vista

我想更改 ASP.NET Core 5 MVC 中的路径

从 ASP.NET MVC 5 中的控制器 ActionResult 更改 html 元素样式

Asp.net MVC 5 动态创建按钮并调用带有参数的 javascript 函数