在使用Ajax.BeginForm()提交表单时出现了中文乱码现象,用Hmtl.BeginForm()就没事。
@ using (Ajax.BeginForm( "Config" , "Configs" , new AjaxOptions { HttpMethod = "Post" , OnSuccess = "Success" , OnFailure = "Failure" })) { @Html.TextBoxFor(model=>model.EmailService.CredentialID, new { style = "width:300px" }) 。。。。用Model直接绑定的 } ////脚本提示执行结果 < script language="javascript" type ="text/javascript"> function Success() { alert( "修改成功" ); } function Failure() { alert( "修改失败!" ); }
后台controller中的post action获取到数据时直接就是乱码了。
以前用JQuery中的ajax方法时是在前台用escapte方法编码,然后在后台用Server.Decode解码的。像上面这种model绑定到控件的方法不知道一般怎么做?
现在发现应该是
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js"
和web.config中的编码gb2312冲突了,不知道怎么解决呢?
最后找到了解决方案:
http://www.cnblogs.com/janes/archive/2012/07/10/2583201.html
我写了个测试程序就是没有乱码出来,真是奇怪,不如你站内短信我你的邮箱,我把测试程序发给你吧。
发送到站内信了,多谢今昭
@丫头小静(Cathy):
邮件你了,可以在里面模拟你的情况,最重要的是能让乱码再现。
@今昭: 太感谢了,找到原因了,
view里面这几行:
@*<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>*@ <script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
和web.config里面的配置有冲突
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN"/>
@丫头小静(Cathy): 不客气,解决问题了就好。
@今昭:
我找到原因了,可是没有解决
@丫头小静(Cathy): 为什么?具体一点。
用Ajax.BeginForm编码方式是MVC自己处理的,一般不用自己处理
建议用开发者工具(如firebug等)查看一下提交的值是什么,确实是客户端还是服务器端的问题,另外还有一种可能就是这个页面本身的编码不对,这种情况可以新建一个页面,然后把代码复制过去试试
1. 将这个页面的编码设置为utf-8:<meta charset="utf-8">
2. 如果解决不了问题,通过js设置一下.ajax的contentType。
$.ajaxSetup({ contentType: 'application/json; charset=utf-8' });
dudu老大,我们的编码全站都是gb2312的
@丫头小静(Cathy): 那应该就是gb2312的原因,.ajax默认用的是utf-8,试试下面的代码:
$.ajaxSetup({ contentType: 'application/json; charset=gb2312' });
@dudu: 应该不是这个问题,我测试了gb2312的方式也么有出现乱码,真是奇怪。
@丫头小静(Cathy):
stackoverflow上提到了这个问题的解决方法:
@{var attributes = new Dictionary<string, Object>(); attributes.Add("accept-charset","gb2312"); using (Ajax.BeginForm("Config" , "Configs" , new AjaxOptions { HttpMethod = "Post" , OnSuccess = "Success" , OnFailure = "Failure" }, attributes)) { } }
@丫头小静(Cathy): 问题还没解决?
@dudu: 出现乱码时,程序是在Visual Studio中运行的,还是在IIS中运行的?