在 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 »</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
vbscript ASP NET MVC - Pasar un viewbag del controlador a la vista