2009-10-16 46 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