如何在 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>

我一直在尝试想出一种方法,使用某种形式和/或隐藏字段将这些参数传递给控制器,但到目前为止还没有成功。我觉得我从错误的角度来解决这个问题,也许,我错过了什么或更好的方法来解决这个问题?

编辑:

我不太清楚用户如何选择主题。我有一个类似于上面的链接下拉菜单。用户单击其中一个链接,我将路由参数值处理到会话变量中。读取会话变量,并根据所选主题选择要加载的捆绑包。

如何在 MVC 中谨慎地将数据传递到控制器 ASP.NET

您可以将此值存储在 cookie 中,并实现将填充会话的全局过滤器:

在客户端,您可以使用jquery-cookie插件,因此设置它的代码将是这样的:

$.cookie('theme', 'cerulean');

您没有指定用户选择主题的确切方式,但假设它是一个下拉列表或按钮,您必须将此代码放入相应的事件处理程序中。

在服务器端,使用自定义操作筛选器从 Cookie 中提取主题变量并填充会话。

您还应该有一个故障转移(默认主题),以防 cookie 未通过。

另一种解决方案是使用支持主题的自定义视图引擎。