2015年1月13日 星期二

VS 2012 C# ViewState筆記 -- 20150113

ViewState原理:

在同一網頁前後連線間保留狀態的方法,在網頁載入前,會「還原連線狀態」,意指會讀取ViewState,然後一一還原控制項或變數的屬性與內容。(20151127)



ViewState(檢視狀態):

功能:保存網頁上的資料,當網頁觸發PostBack時,資料不會消失。

※有時候網頁程式可能需要某些資料持續保留,以便讓後續的連線可以使用,故使用ViewState來紀錄資料。此外,可利用ViewState儲存網頁上各控制項的狀態或程式內部所需的資料,因ViewState是使用網頁內的隱藏欄位來儲存狀態,所以ViewState的使用將導致網頁大小的增加連帶影響使用者連線網頁的速度。

舉例:
  1. 在網頁TextBox欄位中輸入某值,當PostBack發生後,剛所輸入的值還出現在TextBox欄位中。
  2. 在DataGrid中切換分頁時,都可保存DataGrid上(在Client Side端)所有的資料,不需要每更換一次分頁,就從撈一次資料庫,可節省系統的資源。


優點:
不需要使用Server的資源來記錄資訊,可減輕Server負擔,改善網站執行效率。

缺點:
網站不安全,資料量多的話,影響傳輸的效率,也會造成網頁Load時間會較久,且資料會被使用者檢視或者攔截。


公式:

ViewState[ " 變數名稱 " ] = 變數值


備註:

關閉Page(網頁)ViewState功能時,發現某個控制項運作不正常,可單獨將該控制項的ViewStateMode的屬性設為Enabled(啟用),即可。(20151130)




















參考網址:
http://yan3776.pixnet.net/blog/post/11094909-viewstate%E7%9A%84%E9%81%8B%E7%94%A8

參考書籍:

ASP.NET 4.0 -使用C#2012 從零開始 (博碩文化)

2014年11月29日 星期六

VS 2012 C# 偵錯與例外處理 -- 20141128

程式的錯誤可分三大類:

  •  編譯時期錯誤(Compile Time):

    在程式編寫過程中,可由開發工具、編譯器檢查出來的語法錯誤。(如:變數未宣告)

     →解決方法:語法不熟悉,可立即查閱線上說明。 
  •  邏輯錯誤:

    當程式已通過語法、語意檢查,可正常編譯執行,但程式執行結果卻非預期或不合理。

     → 解決方法:執行結果不正確實,再回頭檢查與修正。
  •  執行時期錯誤(Runtime Error):

    指程式在執行階段,遭遇程式未預期、且無法有效處理的意外狀況。(如:連線資料庫失敗)

     → 解決方法:利用VWD提供的偵錯(Debug,或稱除錯)功能來找出問題點,並於已修正。

2014年11月27日 星期四

VS 2012 C# AdRotator輪播設計 -- 20141126

經常看網頁有輪播功能,然而看似很難的功能,其實透過VS 2012簡單的幾個步驟就可以輕鬆製作呈現出來。

-------------------------------------------------------------------------------------------------

步驟一、先製作要輪播的圖片(當然要用文字也可以),如下:

banner1.gif

banner2.gif

banner3.gif



步驟二、設定製作資料來源(包含:XML、Access、SQL Server...等)

 ※ 這裡就採用XML檔作為資料來源,加入→加入新項目→XML檔(圖一)
(圖一)
(圖二)














































根據(圖二)中,在XML檔案中輸入程式碼,如下:

<Advertisements>
  <Ad>
    <ImageUrl>img/banner1.gif</ImageUrl>
    <NavigateUrl>http://tw.yahoo.com</NavigateUrl>           <--- (超連結網址)屬性
    <Impressions>20</Impressions>                                          <--- (輪播出現次數的權重)屬性
  </Ad>
  <Ad>
    <ImageUrl>img/banner2.gif</ImageUrl>
   <NavigateUrl>http://www.google.com.tw</NavigateUrl>
    <Impressions>20</Impressions>  
  </Ad>
  <Ad>
    <ImageUrl>img/banner3.gif</ImageUrl>
   <NavigateUrl>http://www.hinet.net</NavigateUrl>
    <Impressions>60</Impressions>  
  </Ad>
</Advertisements>

※上述(圖二)圖片的檔名有錯誤,要注意別照抄!!
※輪播權重的表示,平均每100次連線,圖片出現的次數。假設上述banner3.gif會出現60次。

步驟三、使用AdRotator控制項

(圖三)
(圖四)
(圖五)





(圖六)

根據上述圖片指示操作後,輪播廣告設定就完成。



結論:

很多事情動手去做才學會,千萬別眼高手低,只有自己依樣畫葫蘆才知道來龍去脈,若您和我都是寫程式的新手,就動手製作去做做看,肯定有收穫的!!!


參考書籍:新觀念APS.NET 4.0網頁程式設計-使用Microsoft Visual C#(施威銘研究室 著) 旗標



2014年11月22日 星期六

VS 2012 C# GridView中欄位的日期格式變化(DateTime) -- 20141121

結論:

     將GridView欄位中的「日期時間」格式改成2014/11/21(如下圖)


















--------------------------------------------------------------------------------------------------------------------


由於在資料庫設計時,將日期欄位為DateTime格式,故前端的GridView呈現預設日期欄位為2014/11/1 上午 12:00:00(如下圖)




















解決方式一、

在資料欄位DataFormatString屬性中,加入  {0:yyyy/MM/dd}































決方法二、

直接在程式碼中加入   DataFormatString="{0:yyyy/MM/dd}"













-----補充(2015/08/04)--------------------------------------------------------------------------------


※GirdView的編輯欄位對照:










































































































---------※資料格式運算式(DataFormatString),以下是舉幾個例子說明:------------------------------

原本輸入的值 格式(英文大小寫有差別) 輸出的結果
2015/1/1 {0:yyyy} 2015
2015/1/1 {0:yyyy年MM月dd日} 42005
1234 {0:D8} 00001234
123.456 {0:C} 123.46

---------------------------------------------------------------------------------------------------------------------



































參考文獻:微軟的「自訂日期和時間格式字串」


2014年11月18日 星期二

VS 2012 C# 日期變化(DateTime) -- 20141117

讓TextBox1呈現「今天」的日期!!!

  • TextBox1.Text = DateTime.Now.ToString( );
→ 進階-指定日期的格式:DateTime.Now.ToString("yyyy/MM/dd");  
→呈現格式(如):2014/11/17


---------------------------------------------------

昨天日期:

  • DateTime.Now.AddDays(-1).ToString("yyyy/MM/dd");

→呈現格式(如):2014/11/16

----------------------------------------------------

明天日期:

  • DateTime.Now.AddDays(1).ToString("yyyy/MM/dd");

→呈現格式(如):2014/11/18


--------------------------------------------------

上個月日期:

DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd")).AddMonths(-1).ToShortDateString( );

--------------------------------------------------

下個月日期:
DateTime.Parse(DateTime.Now.ToString("yyyy/MM/dd")).AddMonths(1).ToShortDateString( );

--------------------------------------------------

本年度第一天:

DateTime.Parse(DateTime.Now.ToString("yyyy/01/01")).ToStringDateString( );

--------------------------------------------------

本年度最後一天:

DateTime.Parse(DateTime.Now.ToString("yyyy/01/01")).AddYears(1).AddDays(-1).ToStringDateString( );






2014年11月14日 星期五

使用AJAX Control Toolkit出現錯誤訊息 -- 20141113

緣由:

由於使用AJAX Control Toolkit擴充的元件開發程式,結果出現了下列錯誤訊息「
找不到任何適用特定文化特性或中性文化特性的資源。請確定您已在編譯時期正確地將 AjaxControlToolkit.Properties.Resources.NET4.resources" 嵌入或連結至組件 AjaxControlToolkit" 中,或所有需要的附屬組件均為可載入且已完整簽署。」(如下圖)





解決方式:

透過AJAX擴充功能選項中,將ScriptManager拖曳到開發的畫面中,錯誤訊息即可消失,程式也可正常運作。(如下圖)

結論:

初學者往往都看見錯誤訊息就會放棄,當找到解決方式的話,肯定會更進一步!退縮與逃避是不能解決問題的,希望我也可以對某項東西也可以持之以恆!  哇哈哈




































認識AJAX -- 20141113

何謂AJAX?

    簡單說就是非同步的網頁技術,是J.J Garrett(2005年初)提出來的一種網頁技術,其AJAX的全名為Asynchronous JavaScript And XML。由於傳統的網頁應用,用戶端必須將整個網頁表單傳回伺服器端,經由伺服器端處理後,再回傳整個網頁內容到用戶端,往往造成許多頻寬的浪費。
    為了解決這問題,故採取AJAX技術,僅將網頁部分內容回傳伺服器端,在將更新後的最新消息載入用戶端,減少資料在網路上傳送,降低伺服器負載,提升網頁的處理效率。


--------------------------------------------------------------------------------
網頁「同步」與「非同步」模式的差異?

例子:當網頁中只有最新消息的需要進行更新,而網頁其他部分(選單、廣告、版權...等)不需要進行更新。

同步處理:
根據上述例子,在傳統的動態伺服器網頁,必須將整個網頁全部回傳至伺服器端,經過伺服器端處理並取的資料庫最新消息之後,再將整個網頁全部內容包含網頁其他部分全部回傳至用戶端。缺點:當伺服器端忙碌或網路速度變慢的時候,此時用戶端的使用者只能等待。


非同步處理:
同樣根據上述例子,在不換頁的情形下,只更新最新消的區塊,且整個網頁只將最新消息區怪回傳至伺服器端,再將更新後的最新消息載入至用戶端,其餘的部份(選單、廣告、版權...等)並不會傳至伺服器端也不會刷新頁面。優點:在伺服器和瀏覽器之間交換的資料大量減少(大約只有原來的5%),伺服器回應更快了,因此Web伺服器的負荷也減少了。

--------------------------------------------------------------------------------------------------------

補充:
AJAX網頁屬於用戶端(展示層)的技術,再用戶端的瀏覽器必須使用JavaScript的XMLHttpRequest送出非同步的Http Request,此時只會將指定的欄位資料傳送至伺服器端,而網頁的其他資料並不會進行回傳(PostBack),接著再透過Http Response方式將更新後的執行結果下載至用戶端的瀏覽器,最後透過JavaScript將更新後的執行結果以背景執行的方式寫回DHTML或DOM(Document Object Model)指定的標籤區塊,此時指定的區塊即會進行更新,由於傳送和接收資料是屬於非同步的模式,因此使用者可以在不換頁的情形下繼續在網頁上進行任何操作。



------------補充 20150807-----------------------------------------------

名詞解釋:


  • XMLHttpRequest物件:用途是被設計來透過HTTP在瀏覽器和伺服器之間接收及傳遞XML或其他格式資料。
  • xmlHttp:是經由Javascript程式產生出來的XMLHttpRequest物件,被命名為xmlHttp。

方法名稱說明
abort( ) 中止要求。
getAllResponseHeaders( ) 取得所有標頭字串值,以成對的「標頭字串/值」的方式回傳。
getResponseHeader( ) 傳回指定標頭字串值,send方法成功後,才可呼叫open( )建立和伺服器連線所需資料。
send( ) 向伺服器提出要求。
setRequestHeader( ) 設定標頭字串值。
屬性名稱 說明
onreadystatechange 是件處理器,每次對伺服器要求狀態改變時,就會觸動這個事件。
readyState XMLHttpRequest物件狀態值,可能的回傳值有:
0 = 還沒有開始
1 = 正在載入
2 = 載入完成
3 = 溝通中
4 = 動作完成
responseText 伺服器以文字型式回傳結果。
responseXML 伺服器以XML型式回傳結果,這裡的XML指和DOM相容文件即可。
status 伺服器回傳代表執行結果狀態。如200帶表完成,404代表找不到要求連線的字串。
statusText 伺服器回傳代表執行結果的文字, 和status是相對照的。




參考資料:維基百科、ASP.NET 4.0從零開始(C# 2010)