首页 文章

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

提问于
浏览
1

我正在尝试使用.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>

我一直试图想出一种方法,使用某种形式和/或隐藏字段将这些参数传递给控制器,但到目前为止一直没有成功 . 我觉得我可能是从错误的角度接近这个,是否有一些我缺少的东西或更好的方法来解决这个问题?

编辑:

关于用户如何选择主题我并不完全清楚 . 我有一个类似于上面的链接的下拉菜单 . 用户单击其中一个链接,我将路径参数值处理到Session变量中 . 读取Session变量并根据所选主题选择要加载的包 .

1 回答

  • 0

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

    在客户端,您可以使用jquery-cookie plugin,因此您设置它的代码将类似于:

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

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

    在服务器端使用custom action filter从cookie中提取主题变量并填充会话 .

    如果没有传递cookie,您还应该有一个故障转移(默认主题) .

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

相关问题