【问题标题】:what if in mvc3 localization and cookies get disabled如果在 mvc3 本地化和 cookie 中被禁用怎么办
【发布时间】:2012-04-03 06:45:07
【问题描述】:

我一直在研究 mvc3 应用程序并尝试对其进行本地化。我遇到了this 非常好的网站,它让我使用了通过 cookie 识别用户选择的语言的逻辑。它的作用是:

  1. 用户点击语言的超链接

  2. 点击的设置保存在cookie中

  3. 页面已重新加载

  4. 在 BaseController 类中,ExecuteCore 方法被重载,此处读取 cookie 并设置 CurrentUICulture 和 CurrentCulture。

现在,这很好用。但是如果用户禁用了 cookie 怎么办? 所以我觉得这行不通。 然后我想使用一种解决方法。我尝试的是

  1. 我创建了一个 HiddenField

  2. 用户点击语言的超链接

  3. 点击的设置保存在cookie中

  4. 点击的设置也保存在HiddenField中

  5. 页面已重新加载

  6. 在 BaseController 类中,ExecuteCore 方法被重载,如果 cookie 值存在,则读取它并设置 CurrentUICulture 和 CurrentCulture。

  7. 如果没有找到 cookie,我会尝试从 Request 对象中读取隐藏的字段值。

但是我在 ExecuteCore 方法的 Request 对象中找不到隐藏字段。

所以我做错了什么? 请以某种方式建议我。我也不想用保存文化的路线。

【问题讨论】:

  • 为什么不在选择时简单地检测 cookie 是否关闭,并提醒用户 cookie 是语言选择所必需的,就像其他大型网站为区域所做的那样(前任 ups)
  • 是的,它可能,但不是每个人都会喜欢该消息并想要打开 cookie。
  • 然后假设您也没有将其包含在 url 中(您可以使用智能路由),他们就会失去此功能。你想取悦多少人 - 绝大多数人都会有 cookie 所以要遵​​守约定 - url /en-us/something 或 cookie。

标签: asp.net asp.net-mvc-3 razor localization controller


【解决方案1】:

隐藏字段值仅在您提交包含它们的表单时发送。如果您只单击某个超链接,浏览器会重定向到该链接指向的 href,并且不会发送任何值,因此您不能期望在您的 ExecureCore 方法中读取它。所以,如果你想让它工作,你必须将语言作为链接查询字符串的一部分。

我也不想用保存文化的路线。

如果您不将值包含在 url(查询字符串或路由)中,并且 cookie 被禁用,则文化值无法到达您的服务器。

【讨论】:

  • 我可以在其中创建一个表单和一个隐藏的提交按钮。然后我通过 javascript 执行 btn.click() 来提交表单?然后在 ExecuteCore 方法中我可以读取隐藏字段的值。
  • @thinkmmk,当然,你不需要 javascript。只需创建一个包含文化和提交按钮的隐藏字段的表单。提交表单时,隐藏字段的值将发送到服务器。
  • 但问题是每个表单都应该有一个“动作”,因为我有一个虚拟表单,那么动作会是什么。我可以只提交一个没有操作的表单吗,因为我只想让我的 ExecuteCore 方法知道隐藏字段的值。
  • @thinkmmk,不,您不能在没有操作的情况下提交表单。这没有任何意义。 HTML 表单提交到服务器,在 ASP.NET MVC 服务器端控制器操作的情况下。
  • @thinkmmk,绝对是的。如果您禁用了 cookie,那么您将无法在 URL 中不可见的情况下向服务器发送值或使用 POST 表单。但就 SEO 而言,拥有这样的 url 更好。
猜你喜欢
  • 2012-03-20
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
相关资源
最近更新 更多