我有一个用html帮助器创建的ajax表单:@using (Ajax.BeginForm(...))
问题是当我发布一些像ñ,€等字符时,它们被编码为ñ - > Ã,€ - > when当控制器收到它们时。
我的Web.config中已有此部分:
<globalization enableClientBasedCulture="true" uiCulture="auto" culture="auto" fileEncoding="iso-8859-15" requestEncoding="iso-8859-15" responseEncoding="iso-8859-15" />
在网址中传递特殊字符时解决了以前的编码问题。
如何解决此问题,以便在控制器中接收该字符?
提前致谢
答案 0 :(得分:3)
问题是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" />