我正在使用以下解决方案。它工作得很好(使用MVC4),但是当错误消息包含Unicode字符时它们都失败了(它们最终都是??????)。
Send exception message in Ajax.BeginForm MVC 4 scenario
任何人都知道如何解决这个问题?
先谢谢
ps:我不能在原始帖子中发表评论,因为我的声誉很低。
答案 0 :(得分:0)
在上面的链接中使用Furynation提出的解决方案。
我通过将消息转换为Base64并发送Unicode来找出临时解决方案。
filterContext.HttpContext.Response.StatusDescription =
Convert.ToBase64String(UTF8Encoding.UTF8.GetBytes(filterContext.Exception.Message));
当客户端Ajax.BeginForm收到错误时,我使用以下代码来获取Unicode中的错误消息。
function (data, status, xhr) {
var Error = DecodeString(atob(data.statusText));
}
我需要编写另一个函数DecodeString()来进行转换,因为atob()将所有内容转换为8位ASCII(幸运的是没有进入?????????)
function Decode(u) {
var a = [];
var i = 0;
while (i < u.length) {
var v = u[i++];
if (v < 0x80) {
} else if (v < 0xE0) {
v = (31 & v) << 6;
v |= (63 & u[i++]);
} else if (v < 0xF0) {
v = (15 & v) << 12;
v |= (63 & u[i++]) << 6;
v |= (63 & u[i++]);
} else {
v = (7 & v) << 18;
v |= (63 & u[i++]) << 12;
v |= (63 & u[i++]) << 6;
v |= (63 & u[i++]);
}
a.push(String.fromCharCode(v));
}
return a.join('');
}
function DecodeString(s) {
var u = [];
for (var i = 0; i < s.length; i++)
u.push(s.charCodeAt(i));
return this.Decode(u);
}
PS。我无法在原始帖子中发布此解决方案,因为我的声誉很低。