2014年1月15日 星期三

ASP.NET Menu.SelectedItem 只會抓到第一個 ChildItem ?!

最近在測動態產生 Menu
MenuItem 全部手動加入 (Menu.Items.Add / Menu.Items[index].ChildItems.Add)

在 MenuItemClick event 要顯示所點選的 MenuItem.Text 時
卻發生永遠只會顯示第一個 ChildItem 的現象

最後才發現
Menu.SelectedItem 應該是透過 Menu.SelectedValue 去比對其下的 MenuItem.Value
來找出該 MenuItem

因為我將所有 MenuItem.Value 都設為相同值
所以 Menu.SelectedItem 抓出來的永遠都是第一個 ChildItem 了

2014年1月14日 星期二

jQuery.ajax 傳遞中文變亂碼

今天用 2 支 asp 測試 jQuery.ajax 傳遞中文
就出現亂碼問題
在這記錄一下
架構是 a.asp 透過 jQuery.ajax 呼叫 b.asp

a.asp
<html>
   <head>
      <meta HTTP-EQUIV="Content Type" CONTENT="text/html; charset=big5">
      <script src="http://codeorigin.jquery.com/jquery-1.10.2.min.js"></script>
      <script>
         $(function(){
            $("#btnSend").on("click",function(){
               $.ajax({
                  async:false,
                  type:"POST",
                  data:{name : $("#tInput").val()},
                  dataType:"text",
                  url:"b.asp",
                  success:function(msg){$("#sMessage").text(msg);},
                  error:function(xhr,status,thrown){alert(thrown);}
               });
            });
         });
      </script>
   </head>
   <body>
      <input type="text" id="tInput">
      <input type="button" id="btnSend" value="Send"><br>
      <span id="sMessage"></span>
   </body>
</html>

b.asp
<%=request.form("name") & " 您好~" %>

在 tInput 中輸入 "某甲"
結果 span 中顯示 "?�甲 �z�n~" 的亂碼

查了一堆資料
才知道原來 jQuery.ajax 預設會將 data 以 utf-8 方式編碼後送出
(contentType 預設為 "application/x-www-form-urlencoded; charset=UTF-8"
 詳見 : jQuery)

所以只要在 b.asp 加入一行 <%session.codepage=65001%>
即可解決亂碼問題
<%session.codepage=65001%>
<%=request.form("name") & " 您好~" %>

關於 session.codepage 的詳細說明請見 : 藍色小舖 (#3老頑童大大的說明)