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

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

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

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

【问题讨论】:

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

标签: c# jquery css asp.net asp.net-mvc


【解决方案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/stackoverflow/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,我想知道这是否是更好的解决方案,你应该真正展示你如何解决它的示例,而不仅仅是帮助他人的描述。
    猜你喜欢
    • 2016-04-25
    • 1970-01-01
    • 2016-12-16
    • 2011-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-27
    • 2016-01-28
    相关资源
    最近更新 更多