2009-10-16 91 views
1

下面是另一个帮助我解决的问题:我有一个使用AJAX(异步)调用的ASP.NET网站,它处理的是.ashx处理程序, 查询字符串参数从数据库中获取一些信息。ASP.NET&Ajax:使用ISO-8859-1编码查询字符串参数

这里是它如何工作的例子:

客户端(JavaScript)的代码片段,使得给处理程序的异步调用:

/* Capture selected value from a DropDownBox */ 
var dropdown = document.getElementById(DropDownID); 
var selectedValue = dropdown.options[dropdown.selectedIndex].value; 

/* Make the call to the handler */ 
var url = "MyHandler.ashx?param=" + selectedValue; 

var ajaxObj = new Ajax(); 
ajaxObj.doRequest(url, MyCallback, args, connectionFailed); 

当我加载webform(包含此AJAX调用),它将正确的查询字符串发送给处理程序(我在Visual Studio中使用调试进行了检查),如param = Street Joseph Blíss。这是我想要的正确行为。

的事情是,当我加载webform再(和所有后续倍),从“幸福”是í字符出现在服务器端为í-。由于这是我试图在服务器端数据库访问脚本中选择的实体的关键,因此它在第一个webform加载时不起作用。

我试过客户端编码查询字符串服务器端对其进行解码,使用这样的事情:

客户端(JavaScript)的:

var encodedParam = encodeURIComponent(selectedValue); 
/* Make the call to the handler */ 
var url = "MyHandler.ashx?param=" + encodedParam ; 

服务器端(ASP.NET,C#):

string encodedParam = context.Request.QueryString["param"]; 
string value = HttpUtility.UrlDecode(encodedParam, Encoding.ASCII); 

...但我没有运气,问题依然存在。任何帮助?

回答

2

经过一番更多的搜索,我发现如何解决服务器端代码优化。这是处理:

我不得不改变我的.ashx处理程序来解析从查询字符串抓取的原始参数,并将其转换为UTF-8。这是它是如何制作的:

// original parameterized value with invalid characters 
string paramQs = context.Request.QueryString["param"]; 
// correct parsed value from query string parameter 
string param = Encoding.UTF8.GetString(Encoding.GetEncoding("iso8859-1").GetBytes(paramQs)); 

快乐编码,乡亲们! :)

+0

不应该是“iso-8859-1”,如此处所述? http://msdn.microsoft.com/en-us/library/system.text.encoding.webname.aspx – Ramunas 2010-10-20 08:03:05