以ajax形式编码特殊字符(asp mvc)

时间:2012-03-18 19:46:16

标签: ajax asp.net-mvc

我有一个用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" />

在网址中传递特殊字符时解决了以前的编码问题。

如何解决此问题,以便在控制器中接收该字符?

提前致谢

1 个答案:

答案 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" />