【问题标题】:Setting Default MVC Action via Javascript通过 Javascript 设置默认 MVC 操作
【发布时间】:2015-07-30 15:05:12
【问题描述】:

我正在构建一个应用程序,其中我的路由将取决于存储在 cookie 中的值。我想动态获取该 cookie 值以用作我的 RouteConfig 中的默认操作。这可能吗?这是我的代码:

routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = MyJSFile.MyFunc()), id = UrlParameter.Optional }
);

MyFunc 获取 cookie 值并返回操作名称字符串的位置。我的代码显然不正确,我只是写它来说明我正在尝试做什么。这样的事情可能吗??

【问题讨论】:

  • MyJFile.MyFunc 是客户端 JavaScript 吗?那将不可用服务器端。可以从任何地方调用该操作,而不仅仅是您的网页 - 例如 fiddler、curl、winform 应用程序。据我所知,当前路由是在应用程序启动时定义的静态查找,并且无法运行代码来确定操作(在为每个调用匹配多个路由时,这可能会非常低效)。如果是这样,它将采用以下格式:action = () => foo(),因为您当前的代码会在设置路由时将 MyFunc 的结果分配给操作(我知道这只是示例代码)
  • 我认为我将采用这里建议的方式...weblogs.asp.net/zowens/asp-net-mvc-javascript-routing
  • 该链接不是 asp.net-mvc-routing,它是一种使用一大堆额外的非标准配置在 javascript 文件中生成链接的方法。这些“路由”在外部 javascript 中不起作用(例如,只需在浏览器中输入 url),如果这是您对问题的解决方案,那么问题应该被大幅改写。
  • 您可以添加 ActionFilter 并根据 cookie 重定向到所需的操作(但从评论到答案,这也不是您想要的)。目前尚不清楚您要达到的目标。

标签: javascript asp.net-mvc asp.net-mvc-routing


【解决方案1】:

我不知道你用什么方法来读取cookies。你也不是 提到问题,所以我假设如下..

var controller = docCookies.getItem('Mycontroller');
var action = docCookies.getItem('Myaction');
var id = docCookies.getItem('MyID');

window.location.href = "/controller/action/id";

希望对你有所帮助

【讨论】:

  • 这可以重定向到基于 cookie 的页面,但是我实际上是在尝试在我的路由集合中设置路由的值。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
相关资源
最近更新 更多