2017年9月18日 星期一

[轉貼]jQuery與JSON的資料傳遞(網頁前段與後端的資料傳遞 - 序列化 Serialization) from kyleshen

今天在論壇上看見一則討論
點部落的另外一位網友 -- kyleshen 有兩篇文章很淺顯易懂(超連結在文章最後面),推薦給大家。

但在觀看這兩篇文章以前,可以從這些文章入門
========================================================================================
你不可不知的 JSON 基本介紹 ( from  AppleBOY )
   http://blog.wu-boy.com/2011/04/%E4%BD%A0%E4%B8%8D%E5%8F%AF%E4%B8%8D%E7%9F%A5%E7%9A%84-json-%E5%9F%BA%E6%9C%AC%E4%BB%8B%E7%B4%B9/
陳鍾誠老師的文章  http://ccc.nqu.edu.tw/wd.html#js:object


一圖解千言,看了立刻懂
    

===================================================
2014/5/14補充:
      VS 2013 Update 2推出以後,有提供 JSON file幫您做驗證,有助您撰寫JSON文檔
      詳見 http://blogs.msdn.com/b/webdev/archive/2014/05/12/announcing-new-web-features-in-visual-studio-2013-update-2-rtm.aspx


ASP.NET的朋友通常會用到 JSON.NET
JSON.NET 網站的首頁就有很簡單的範例,解釋這些事情:

(1).  Serialize JSON(我個人的註解:這就是組成、產生JSON格式的內容)

Product product = new Product();
product.Name = "Apple";
product.Expiry = new DateTime(2008, 12, 28);
product.Sizes = new string[] { "Small" };
 
string json = JsonConvert.SerializeObject(product);
//{
//  "Name": "Apple",
//  "Expiry": "2008-12-28T00:00:00",
//  "Sizes": [
//    "Small"
//  ]
//}

(2).  Deserialize JSON(我個人的註解:這就是讀取JSON格式的內容)
string json = @"{
  'Name': 'Bad Boys',
  'ReleaseDate': '1995-4-7T00:00:00',
  'Genres': [
    'Action',
    'Comedy'
  ]
}";

Movie m = JsonConvert.DeserializeObject(json);

string name = m.Name;
// Bad Boys

(3). LINQ to JSON(我個人的註解:如果資料量太大,您可以動手寫LINQ-to-SQL去查詢)

JArray array = new JArray();
array.Add("Manual text");
array.Add(new DateTime(2000, 5, 23));

JObject o = new JObject();
o["MyArray"] = array;

string json = o.ToString();
// {
//   "MyArray": [
//     "Manual text",
//     "2000-05-23T00:00:00"
//   ]
// }

(4). Validate JSON(我個人的註解:驗證JSON格式的內容,驗證後才能取用。XML格式也常常需要驗證,已符合Schema)

JsonSchema schema = JsonSchema.Parse(@"{
  'type': 'object',
  'properties': {
    'name': {'type':'string'},
    'hobbies': {'type': 'array'}
  }
}");

JObject person = JObject.Parse(@"{
  'name': 'James',
  'hobbies': ['.NET', 'LOLCATS']
}");

bool valid = person.IsValid(schema);
// true

JSON.NET的文件與範例都在這裡,相信您看了一次,就會知道怎麼用它
http://james.newtonking.com/json/help/index.html



完成上面的入門以後,相信後續的文章就能看得懂了。

微軟 msdn這個範例也很淺顯喔!
http://msdn.microsoft.com/zh-tw/library/hh923971(v=vs.85).aspx

點部落的另外一位網友 -- kyleshen 有兩篇文章
如何在前端傳遞JSON物件至後端接收


介紹如何從後端組出JSON物件,回傳至前端接收。

相關的文章可以參閱:


[入門] JSON.NET 入門  ( from johnny )


微軟MVP小歐也有撰寫序列化的三篇文章:

微軟 msdn文件 -- 序列化
http://msdn.microsoft.com/zh-tw/library/ms233843.aspx



除了上文提到的 JSON.NET之外
微軟自從 .NET 3.5起,也有推出 JavaScriptSerializer 類別

System.Web.Script.Serialization 命名空間包含可用來對 Managed 型別進行 JavaScript Object Notation (JSON) 序列化和還原序列化的類別。 它也提供了自訂序列化行為的擴充性功能。

類別說明
公用類別JavaScriptConverter為自訂型別轉換子提供抽象基底類別。
公用類別JavaScriptSerializer為具有 AJAX 能力的應用程式提供序列化和還原序列化功能。
公用類別JavaScriptTypeResolver提供實作自訂型別解析程式的抽象基底類別。
公用類別ScriptIgnoreAttribute指定 JavaScriptSerializer 不會將公用屬性或公用欄位序列化。 此類別無法被繼承。
公用類別SimpleTypeResolver提供 Managed 型別的型別解析程式。

[轉貼] ASP.NET -- Web Service (.asmx) & JSON

ASP.NET Web Service (.asmx) 要傳回 JSON格式
大力推薦這一篇 Web Service in ASP.NET (Return JSON and XML)
文章裡面使用了 JavaScriptSerializer類別 (命名空間: System.Web.Script.Serialization)

以前沒做過,但臨時被要求 ASP.NET Web Service 要傳回 JSON格式
找到網路上兩篇好文章,為自己做筆記。

如果您寫過 Web Service的話
直接看程式碼就會做了,淺顯易懂。只有很細微的修改:

點選圖片可連回原文出處....

文章裡面使用了 JavaScriptSerializer類別 (命名空間:  System.Web.Script.Serialization)


如果您的(Client端)要用 jQuery來接收
     對方(Server端)的 Web Service ( 傳回 JSON格式)

另外也有幾篇好文章,也推薦給大家:
(這一篇是用 ASP.NET 2.0做的,但跟上面介紹的方法雷同。)

 
 
******************************************************************************************
如果語法轉換有問題,可以參閱
******************************************************************************************

本網站以前的相關文章:
      有些朋友在開啟網站或專案時,選用 .NET 4.5.x (VS 2013) or .NET 4.6 (VS 2015)
      加入新項目時,找不到 Web Service (.asmx) ?????

      您可以改為「開啟」 .NET 4.0 or 4.5 (VS 2012)的網站或專案,就能在其中加入「Web Service (.asmx)」
      ASP.NET的 Web Service or WCF Service只是一個沒有「畫面」的 ASP.NET網頁...... 不要把它想得太難啦  :-)

Web Service入門 #2,呼叫現成的Web Service 給我的程式來用



[入門範例] ASP.NET Web Service (asmx) 與 jQuery AJAX

[轉貼]jQuery與JSON的資料傳遞(網頁前段與後端的資料傳遞 - 序列化 Serialization) from kyleshen


分享,讓知識更加偉大
謝謝每一位樂於分享的前輩  :-)



 
 
我將思想傳授他人, 他人之所得,亦無損於我之所有;
猶如一人以我的燭火點燭,光亮與他同在,我卻不因此身處黑暗。----Thomas Jefferson
寫信給我--  mis2000lab (at) yahoo.com.台灣  或是  school (at) mis2000lab.net
................   facebook社團   https://www.facebook.com/mis2000lab   ......................
................   Google+   https://plus.google.com/100202398389206570368/posts ........
................  YouTube (ASP.NET) 線上教學影片  http://goo.gl/rGLocQ
請看我們的「售後服務」範圍(嚴格認定)。

會員登入 與 FormsAuthentication (Web.Config裡面的 authentication mode="Forms")

會員登入 與 FormsAuthentication (Web.Config裡面的 )

用 Web.Config 鎖死後台管理區 需要權限的檔案,必須通過帳號、密碼才能登入(看得見)
本範例源自微軟MSDN的範例(予以簡化)


這是一個很老的方法(從.NET 2.0就有了)
topcat寫的最詳細,學習ASP.NET 2.0會員機制三部曲 www.dotblogs.com.tw/topcat/archive/2009/08/03/9821.aspx

我比較單刀直入,一個可用的範例PO出來就會做了
先看執行畫面:
      

      


您要改的地方,就是下面這幾個重點。檔案 Session_Login.aspx
有心研究的朋友,微軟MSDN網站查一下,都有!
   protected void Button1_Click(object sender, EventArgs e)
    {
        if (TextBox1.Text == "123" && TextBox2.Text == "123")
        {    //基本上,底下這段幾乎是照抄!就能運作!       
            String groups = "Admin";   //群組(角色)。可以自己寫字串,也可以從資料庫裡面抓取您設定的數值。
            //Create the ticket, and add the groups.登入成功後,是否用Cookie記錄?
            bool isCookiePersistent = CheckBox1.Checked;
            //輸入參數: 使用 Cookie 名稱、版本、目錄路徑、核發日期、到期日期、永續性和使用者定義的資料
            // 此 Cookie 路徑設定為在Web.Config組態檔中建立的預設值,也就是  path="/"。
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(1, TextBox1.Text, DateTime.Now, DateTime.Now.AddMinutes(60), isCookiePersistent, groups);   
            //-- 每個參數的用意 ---------------------------------------------------------------------------------------------
            //--  version  類型:System.Int32  票證(ticket)的版本號碼。
            //--  name  類型:System.String  與票證相關的使用者名稱。
            //--  issueDate  類型:System.DateTime  核發此票證時的本機日期和時間。
            //--  expiration  類型:System.DateTime  票證到期的本機日期和時間。
            //--  isPersistent  類型:System.Boolean  如果票證將存放於持續性 Cookie 中 (跨瀏覽器工作階段儲存),則為 true,否則為 false。 
            //           如果票證是存放於 URL 中,則忽略這個值。 
            //--  userData  類型:System.String  要與票證一起存放的使用者特定資料。
            //Encrypt the ticket. 加密,以策安全!
            String encryptedTicket = FormsAuthentication.Encrypt(authTicket);
            //底下的就是寫Cookie而已,請看 上集 第十六章「狀態管理」
            HttpCookie authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
            if (true == isCookiePersistent)
                authCookie.Expires = authTicket.Expiration;    // cookie過期日
            //Add the cookie to the outgoing cookies collection.
            Response.Cookies.Add(authCookie);
            //通過身份驗證的人,才能看見原本的網頁,例如Hello.aspx。
            //通過驗證後,自動回到(導向)原本想看的網頁。
            Response.Redirect(FormsAuthentication.GetRedirectUrl(TextBox1.Text, false));
        }
        else        {
            Response.Write("

登入失敗(帳號或密碼錯誤)

");
        }
    }
註解:  程式中用到的 FormsAuthentication ,請看 
................................................................................................................................................

Web.Config檔案裡面需要一些設定:
也因為 Web.Config檔鎖定了所有檔案,只要您想直接開啟(觀看)網頁,就會「被導向」登入畫面 ( 檔案 Session_Login.aspx )
帳號、密碼都正確後,才能看到這些「後台管理區」的網頁。
這樣的功能,您可以用本文範例來做(用 Web.Config 鎖死這些需要權限的檔案)
也可以自己寫,其實不會太困難喔,如下圖。
 
範例下載 --  https://onedrive.live.com/?id=6F7F668080F24B20%21115&cid=6F7F668080F24B20
檔名:WebSite3_Easy_Login_FormsAuthentication.rar  (C#)
      WebSite3_Easy_Login_FormsAuthentication_VB.rar  (VB)

動手先玩一下,知道他運作的流程。
然後再來審閱程式裡面的邏輯、參數的用法。

這個範例是從微軟MSDN範例裡面,簡化而來。特此感謝。
如果您要下載上面這個 Windows AD來作會員登入 範例,可以參閱我以前的文章:

      ASP.NET透過AD進行驗證 #4 -- 會員登入、會員專屬網頁 / Login AD Account


相關範例可以參考   topcat撰寫的 -- [範例]ASP.NET使用Session驗證練習範例

2017年9月8日 星期五

[ASP.NET]第六章 SqlDataSource與大型控制項

ASP.NET專題實務(上集 / 松崗出版)

第六章 SqlDataSource與大型控制項

(1) SqlDataSource設定步驟 (CRUD、進階按鈕)

(2) 轉成樣版(TemplateField)

(3) DetailsView與FormView的異同



因為書附影片的聲音斷斷續續,所以重新錄製後上傳。





2017年5月2日 星期二

Win10的 IE 11 瀏覽器,Cookie放置路徑 (資料夾)

IE 11 瀏覽器的 Cookie放在
C:\Users\你的帳號\AppData\Local\Microsoft\Windows\INetCookies

剛剛無意中發現,幫自己做一個記錄
以前上課講到網頁程式的「狀態管理」
講到 Cookie
都會拿一個 cookie檔給學員看

但是新版的作業系統,就不知道它存放在哪裡了?
剛剛無意中發現,幫自己做一個記錄

IE 11 瀏覽器的 Cookie放在
C:\Users\你的帳號\AppData\Local\Microsoft\Windows\INetCookies

Cookie檔案的內容,大致如下
MSX_tipdsqjqj
abcdefghijk3a0701e45123d5f4f56789e445a4a4230987
shopping.abc.net/
51200
3344464222
5889398
2533362045
3253999
*

..........................................................................................................................
其實在 C:\Users\你的帳號\AppData\Local\Microsoft\Windows 這個目錄下,
有很多IE瀏覽器的暫存檔案,以 INet....開頭



這些目錄可能是系統 "隱藏"目錄,請您自己修改設定後,打開來看



剛剛無意中發現,幫自己做一個記錄

2017年4月24日 星期一

1.面試前,不妨直接在電話裡面講清楚 & 2.微軟的面試經驗

面試,是一種靠經驗培養出來的能力。 
要能讓對方與自己都能在短時間內,對一份工作有共識、有體認,真的好難好難! 

面試,不管是在哪個方位? 
謀職?或是應徵新人? 
都是需要「能力」才能作得好。



說到面試,往往是第二關了。
通常一開始都會有電話、或是E-Mail通知我們。

為了避免浪費彼此的寶貴時間,最好在電話裡面(或是主動撥電話)去問個清楚。

例如:接到電話或是E-Mail後,我會直接跟對方聯絡、或是請教對方(當然語氣要很和緩、有禮貌)
 
請問工作內容大概是?
(因為我對於100%寫程式的工作已經厭煩,所以我會事先問清楚。)

請問 貴公司的地址在哪裡?大約有多少人?
(曾經有一家公司在紅樹林,人數只有三人,要我去面試。實在太遠、太小,我也婉拒了)

請問長官,您看過我在履歷上要求的薪資嗎?
(與其浪費一堆時間,才發現薪資根本差距很遠。那不如一開始就問清楚。。
    當然,沒工作經驗的新鮮人,不要濫用這一招,以免......)

這三個問題,大概可以過濾掉七成的公司。為自己、為對方省下很多寶貴時間。

當然,如果對方一開口,就是大型知名企業。我只會詢問第一個問題。
我願意花時間去聽聽看這份工作、為何他會想挑選我?

...........................................................................................................

曾經有一家知名的連鎖書店,可能是想作電子商城吧?
曾經打電話來面試,而且對方口氣滿強硬(強勢)的,要求我直接在線上面試。

對方:「我看過你的履歷了,我直接跟你面試,請問你對"系統"的定義是什麼?」
說真的,我有點愣住。因為那時已經是晚上八點多,我正在洗衣服,毫無心理準備。
我直接跟他說,我畢業一陣子了,工作了幾年,與其直接跟您討論"系統"的學術定義,不如跟您報告我做過了哪些系統?
接下來,我把做過的幾個案子跟對方講完。

對方覺得OK,又問了幾個問題。(因為口氣很強勢,高高在上的樣子。我根本來不及反問我的三大問題)
礙於禮貌,我還是耐心地接受對方的問題。

等到告一段落之後,我終於有空隙可以反問對方。
卻被對方一口阻止,他說:「你不用問,我給你一個問題,你思考完之後,後天晚上來公司跟我面談」
「印度的佳爾各答,是一個大城市,人口很多、交通繁忙。如果您是市長,你該怎麼處理交通問題?」
「你要想辦法疏通?或是把整個城市的路都打掉重建?」
「你能回答這問題,我就知道你能拿多少薪資?能作什麼工作?」

 
靠!我聽到這裡,已經一肚子火。
這種面試實在很糟糕。言不及義!
如果拿這種問題來詢問沒工作經驗的社會新鮮人,是有必要的。
因為剛畢業的新鮮人沒有經驗,大概只能問問這些「形而上」的觀念題,作點心理測驗之類的。

對於有工作經驗的人來說,從他過去幾年的工作裡,其實有追問不完的問題......
無法從面試者的經歷裡面,挑出問題,繼續追問下去,這是「面試官」的能力不足。
這種人以後變成你的長官,一定會出包

我還是耐下這口氣,盡量有禮貌地回答說:
    「嗯!長官,很對不起,跟您溝通了這大半個鐘頭,我心裡也有些想法。
        我真的很感謝您打電話過來,不過我覺得我不適合你們公司,因為......」
我話都還沒講完呢!


對方不知道嘟濃了什麼,很迅速地、很大聲地把電話摔了。

其實我滿高興能當機立斷地完成這場面試。
1. 對方口氣與態度都很不好,一副高高在上的樣子。這種主管將來大概也很難相處。
我去面試,並不是去乞討、也沒有低人一等。我們敢上門面試、或是能被挑選上,
就表示自己稍微有點料、願意跟新公司一起奮鬥。大家一起迎向未來。
公司一定是業務吃緊、缺人,才需要人家幫忙。
勞資雙方都該是平等、互重的,沒有誰是高高在上,跩個二五八萬似的
。
更沒有誰「養」誰的問題,因為勞資雙方的結合,都是要解決工作上的問題!

2. 面對不同經驗的面試者,該有不同的問題來判別。不是傻呼呼地用自己的問題問到完。
連重點都抓不住,問題的輕重無法區分....這種主管,你願意跟他一起共事嗎?

3. 對方雖然是家不算小的公司,但在這個領域已經太慢參與,落後競爭對手太多了。
(我可以感覺道:他問佳爾各達的交通問題,其實在影射他們的系統已經不知道要繼續?或是砍掉重練?)
這種問題絕對不可能是「是非題」,一定是「申論題」。    答案,不是蠢人想得這麼簡單。

後來,這家連鎖的黃色書屋,的確在網路書店上沒有傑出的表現。實體通路上似乎也沒有突破。
 


2010/11月補充:
    我曾經要求先作電話面試,惹出一場風波。

...........................................................................................................


接下來,要講的是微軟公司了,大名鼎鼎的 Microsoft。  台灣微軟!
我敢指名道姓,表示這是一個很不錯的面試經驗。

原本是獵人頭公司幫我介紹的工作。
說真的,跟我當初期望差很多,但因為公司很知名,我還是準時前往。
沒辦法,獵人頭公司的人力顧問,對於IT產業的分類很外行,他們沒辦法區份這行業裡面的工作細向。
我一共遇見四家獵人頭公司,有三家介紹的工作都失去準頭。
如果對方(人力顧問)很年輕,那更慘。他們完全沒啥工作經驗,就要靠介紹別人高階工作來賺錢了,很誇張。

一進門,寒暄過後,對方給我一張 A4的考試卷。上面有十個IT問題,希望我作答。
我看了一下,寫了一些重點。大概只能回答六題而已,因為其他題目,我從來沒碰過。

原以為死定了。後來對方很禮貌地告訴我:「這是工作上,客戶最常提起的十大疑問。
           如果你來上班,每天都會遇見這些IT問題,並且要提供客戶解答。你認為這樣的工作,你有興趣嗎?」

天啊!真是厲害!
用十個問題,就把工作內容講得很清楚,也讓面試者心裡有了底。
不愧是台灣微軟啊~

因為薪資有不少差距,所以我很快地婉拒了這份工作。
後續又有一次到微軟面試的機會,我也覺得不合適,也婉拒了。

但兩次的面試經驗,都讓我對微軟這家公司留下了很好的印象。

==============================================================
越是知名的大公司,對於面試者(新人)的態度,越是禮貌而恭敬。
我面試過幾家大型的知名企業,每家都留下了不錯的印象。
就算彼此不太適合,雙方也都能有禮貌地完成階段工作。

互敬互重,應該是面試的時候,最基本的要求,也是最好的結尾。


 

面試,絕對不是傻呼呼地問一些固定問題。
也不是在公司呆久了,以為 年資夠 就有資格去面試新人。

面試,是一種攻防戰。
自己沒有豐富的戰爭經驗(去被別人面試),也很難有經驗或想法去面試新人。
這是一體兩面的事
「面試」也是要透過學習,才能擁有的能力。

想想看,自己要應徵新人,該怎麼在最短的時間內,把工作內容講清楚,讓對方感同身受。
這能力的培養,一點都不容易。
更甚者,沒有經驗的話,連對方履歷裡面的缺失與漏洞,搞不好都挑不出來。
到頭來,耗日費時,浪費了雙方寶貴時間。

面試,是一種靠經驗培養出來的能力。

面試,不管是在哪個方位?
    謀職?或是應徵新人?
    都是需要「能力」才能作得好。

這份能力需要養成,不會憑空獲得。

希望我分享一些經驗,對大家有些幫助。
 


關於履歷的寫法,各位也可以參考這篇文章----[轉貼]給求職者的忠告:一千份履歷之後

另外一位網友,也是遇見了有趣的電話面試,請看他的經驗談-- 招募者的品格
 http://www.homeoffice.idv.tw/archives/000915.html