我有一个使用 html 帮助器创建的 ajax 表单:@using (Ajax.BeginForm(...))
问题是,当我发布一些字符(如 ñ、€ 等)时, Controller 接收到这些字符时,它们会被编码为 ñ -> ñ, €-> â。
我的 Web.config 中已包含此部分:
<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" fileEncoding="iso-8859-15" requestEncoding="iso-8859-15" responseEncoding="iso-8859-15" />
解决了之前在 url 中传递特殊字符时的编码问题。
如何解决此问题,以便我可以在 Controller 中接收该字符?
提前致谢
最佳答案
问题是 AJAX 使用 UTF-8
发送请求时的编码。但您已将服务器配置为期望 requestEncoding="iso-8859-15"
这就是差异的来源。
假设您有一个名为 Category
的输入字段在您的表单中,用户输入 ñ
其中的人物。如果使用普通的Html.BeginForm
以下 POST 请求负载将被发送到服务器:
Category=%F1
另一方面,如果您使用 Ajax.BeginForm
,以下请求 POST 负载将被发送到服务器:
Category=%C3%B1&X-Requested-With=XMLHttpRequest
在这种情况下,服务器无法正确解码此 UTF-8 编码请求,因为它预计请求为 iso-8859-15
编码。
因此,您可以修改 web.config 以对站点使用 UTF-8 请求和响应编码。在 2012 年想不出在 Web 应用程序中使用 UTF-8 以外的任何其他编码的正当理由。
<globalization
enableClientBasedCulture="true"
uiCulture="auto"
culture="auto"
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
/>
另外,不要忘记更新任何 <meta>
您的布局中可能有的标签,以便使用 UTF-8
还有:
<meta charset="utf-8" />
关于ajax - 以ajax形式编码特殊字符(asp mvc),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9761652/