如何在 MVC 中谨慎地将数据传递到控制器 ASP.NET
本文关键字:数据 控制器 NET ASP MVC | 更新日期: 2023-09-27 18:35:18
我正在尝试使用.NET MVC实现用户可选择的主题。主题存储为 css 包,我从存储在会话中的变量更改捆绑包请求:
@{
if (Session["Theme"] == null)
{
Session["Theme"] = "cerulean";
}
}
@Styles.Render("~/bundles/" + Session["Theme"] + "/css")
现在,我能够将主题字符串传递给控制器以修改 Session 变量的唯一方法是通过路由参数,这些参数向用户公开(至少在第一页上)。
<li>@Html.ActionLink("Default", "Index/default", "Home")</li>
我一直在尝试想出一种方法,使用某种形式和/或隐藏字段将这些参数传递给控制器,但到目前为止还没有成功。我觉得我从错误的角度来解决这个问题,也许,我错过了什么或更好的方法来解决这个问题?
编辑:
我不太清楚用户如何选择主题。我有一个类似于上面的链接下拉菜单。用户单击其中一个链接,我将路由参数值处理到会话变量中。读取会话变量,并根据所选主题选择要加载的捆绑包。
您可以将此值存储在 cookie 中,并实现将填充会话的全局过滤器:
在客户端,您可以使用jquery-cookie插件,因此设置它的代码将是这样的:
$.cookie('theme', 'cerulean');
您没有指定用户选择主题的确切方式,但假设它是一个下拉列表或按钮,您必须将此代码放入相应的事件处理程序中。
在服务器端,使用自定义操作筛选器从 Cookie 中提取主题变量并填充会话。
您还应该有一个故障转移(默认主题),以防 cookie 未通过。
另一种解决方案是使用支持主题的自定义视图引擎。