網上有很多亂解決方案,比如設定web.config等,感覺都不夠簡單。
感謝小猴告訴我最通用的方法,就是前台js中文編碼escape(),後台解碼Server.UrlDecode()
另外注意,如果網頁進階儲存選項不是utf-8,要改過來。我沒有試過其他編碼,總之此編碼成功。
前台:
- <%@ Page Language="C#" AutoEventWireup="true" CodeFile="AjaxLuanMa.aspx.cs" Inherits="testXc_AjaxLuanMa" %>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" >
- <head runat="server">
- <title>Ajax亂碼問題</title>
- <script type="text/javascript">
- //輸入列號,列名,monthNum更新資料庫。
- //如果monthNum為"空",則代表要更新的是暫存資料表。
- //如果monthNum非空,則根據月份和列號,更新模板表。
- function CallServer(colName,col,monthNum)
- {
- arg = escape(colName) + '|' + escape(col) + '|' + escape(monthNum);
- <%= ClientScript.GetCallbackEventReference(this, "arg", "OnCallBack", null) %>;
- }
- //回呼函數,提示一下。
- function OnCallBack(result,context)
- {
- alert(unescape(result));
- }
- </script>
- </head>
- <body>
- <form id="form1" runat="server">
- <div>
- <input type="button" value="確定" onclick='CallServer("列名","列號","空");' />
- </div>
- </form>
- </body>
- </html>
後台:
- using System;
- using System.Data;
- using System.Configuration;
- using System.Collections;
- using System.Web;
- using System.Web.Security;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- using System.Web.UI.WebControls.WebParts;
- using System.Web.UI.HtmlControls;
- public partial class testXc_AjaxLuanMa : System.Web.UI.Page, System.Web.UI.ICallbackEventHandler
- {
- private string result;
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- //引發回調事件處理
- public void RaiseCallbackEvent(string eventArgument)//參數是從前台傳過來的字串。
- {
- string[] args = eventArgument.Split('|');
- //執行商務邏輯
- string arg0 = Server.UrlDecode(args[0]);
- string arg1 = Server.UrlDecode(args[1]);
- string arg2 = Server.UrlDecode(args[2]);
- if (arg2 == "空")
- result = "更新暫存資料表:" + arg0 + "和" + arg1;
- else
- result = "更新模板表:" + arg0 + "和" + arg1;
- }
- //回傳回調結果
- public string GetCallbackResult()
- {
- return result;
- }
- }
end