Asp.net mvc 4 使用Ajax.ActionLinks进行MVC 4主题切换
此问题的全文可通过屏幕截图获得 感谢您的帮助-原始帖子如下: 因此,我下载了MvcMusicStore并启动了已完成的项目。我阅读了所有关于扩展视图引擎和使用jquery插件的文章,但我想相信,单击链接时只更改CSS文件路径可能比这更简单。主要是因为我不想一字不差地复制我不完全理解的代码。我对MVC很陌生 这就是我所做的: 在HomeController.cs中,我添加了:Asp.net mvc 4 使用Ajax.ActionLinks进行MVC 4主题切换,asp.net-mvc-4,actionlink,asp.net-mvc-partialview,Asp.net Mvc 4,Actionlink,Asp.net Mvc Partialview,此问题的全文可通过屏幕截图获得 感谢您的帮助-原始帖子如下: 因此,我下载了MvcMusicStore并启动了已完成的项目。我阅读了所有关于扩展视图引擎和使用jquery插件的文章,但我想相信,单击链接时只更改CSS文件路径可能比这更简单。主要是因为我不想一字不差地复制我不完全理解的代码。我对MVC很陌生 这就是我所做的: 在HomeController.cs中,我添加了: public ActionResult Theme(string themeName) {
public ActionResult Theme(string themeName)
{
ViewBag.Theme = ThemeModel.GetSetThemeCookie(themeName);
return View();
}
我在模型中添加了此类:
public class ThemeModel
{
public static string GetSetThemeCookie(string theme)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("userTheme");
string rv = "Blue";
if (theme != null)
rv = theme;
else
{
if (cookie != null)
rv = cookie["themeName"];
else
rv = "Blue";
}
cookie = new HttpCookie("userTheme");
HttpContext.Current.Response.Cookies.Remove("userTheme");
cookie.Expires = DateTime.Now.AddYears(100);
cookie["themeName"] = rv;
HttpContext.Current.Response.SetCookie(cookie);
return rv;
}
}
然后我创建了Site.css的两个副本,只更改了背景颜色和字体系列以及一个视图来生成我的链接标签
<link href="@Url.Content(string.Format("~/Content/{0}.css", ViewBag.Theme))" rel="stylesheet" type="text/css" />
HomeController.cs
public ActionResult Theme(string themeName)
{
ViewBag.Theme = ThemeModel.GetSetThemeCookie(themeName);
return PartialView();
}
但是,即使这停止了重复渲染,当我单击主题链接时,颜色也会改变,但我在页面上完全看不到其他内容
现在真的很困惑,需要一些帮助
干杯,
.pd.好的-下面是我最后的做法 创建一个javascript文件。我的名字叫master.js:
function ajaxSuccSetTheme(theme) {
$('#linkTheme').attr('href', '/Content/' + theme + '.css');
}
修改_Layout.cshtml:
@{Html.RenderAction("Theme", "Home");}
@{
if (ViewBag.Theme == null) {
ViewBag.Theme = MvcMusicStore.Models.ThemeModel.GetSetThemeCookie();
}
}
<link id="linkTheme" href="@Url.Content(string.Format("~/Content/{0}.css", ViewBag.Theme))" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-2.0.3.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/master.js")" type="text/javascript"></script>
老实说,如果不检查IsAjaxRequest()
IsAjaxRequest(),只返回null并不重要,因为我们需要设置cookie,以便它记住您下次登录的时间
这只会在ThemeModel中保留cookie设置方法:
public class ThemeModel
{
public static string GetSetThemeCookie(string theme = null)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("userTheme");
string rv = "Blue";
if (theme != null)
rv = theme;
else
{
if (cookie != null)
rv = cookie["themeName"];
else
{
cookie = new HttpCookie("userTheme");
rv = "Blue";
}
}
cookie.Expires = DateTime.Now.AddYears(100);
cookie["themeName"] = rv;
HttpContext.Current.Response.SetCookie(cookie);
return rv;
}
}
希望我帮助了别人。如果您更愿意在jQuery中完成这一切,下面是
干杯
.pd.好的-下面是我最后的做法 创建一个javascript文件。我的名字叫master.js:
function ajaxSuccSetTheme(theme) {
$('#linkTheme').attr('href', '/Content/' + theme + '.css');
}
修改_Layout.cshtml:
@{Html.RenderAction("Theme", "Home");}
@{
if (ViewBag.Theme == null) {
ViewBag.Theme = MvcMusicStore.Models.ThemeModel.GetSetThemeCookie();
}
}
<link id="linkTheme" href="@Url.Content(string.Format("~/Content/{0}.css", ViewBag.Theme))" rel="stylesheet" type="text/css" />
<script src="@Url.Content("~/Scripts/jquery-2.0.3.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/master.js")" type="text/javascript"></script>
老实说,如果不检查IsAjaxRequest()
IsAjaxRequest(),只返回null并不重要,因为我们需要设置cookie,以便它记住您下次登录的时间
这只会在ThemeModel中保留cookie设置方法:
public class ThemeModel
{
public static string GetSetThemeCookie(string theme = null)
{
HttpCookie cookie = HttpContext.Current.Request.Cookies.Get("userTheme");
string rv = "Blue";
if (theme != null)
rv = theme;
else
{
if (cookie != null)
rv = cookie["themeName"];
else
{
cookie = new HttpCookie("userTheme");
rv = "Blue";
}
}
cookie.Expires = DateTime.Now.AddYears(100);
cookie["themeName"] = rv;
HttpContext.Current.Response.SetCookie(cookie);
return rv;
}
}
希望我帮助了别人。如果您更愿意在jQuery中完成这一切,下面是
干杯
警察局