總網頁瀏覽量

2013年1月29日 星期二

ASP.net雜記

程式要常碰,不碰很快就會忘掉


太多東西很難懂,描述不夠直觀與白話
一時根本看不懂先筆記下來:
命名空間是什麼?什麼叫做抽象的控制項?

什麼叫做執行個體?所謂執行個體就是一個軟體系統‧。


1.使用者看到的網頁都是編譯過後呈現的HTML程式碼
由IIS Server編譯ASP.net網頁


2.inline code:將程式碼跟HTML寫在同一檔案中
其中程式碼寫在<% %>裡面。

   <% Response.Write("<br>你好阿");
       Response.WriteFile("body.txt");
//將txt內容印在網頁上,注意編碼問題
       Response.Redirect("http://tw.yahoo.com");
//網頁重新導向,本例子將網頁導向雅虎。開啟本網頁立刻跳到yahoo,往後可以用onclick事件來做Response.Redirect();
       %>



3.寫好網頁程式打開瀏覽器沒有呈現新的結果,這是因為緩衝區的資料還是舊的版本程式碼,在browser重新整理即可。





4.使用者自行輸入東西給變數:
在asp.net用Request來接收使用者輸入的值
程式碼如下:
 int num = Convert.ToInt32(Request["number"]);
number是變數名稱,接收使用者輸入的值
Convert是類別庫
ToInt32是函式,將變數值轉成32bits的Int
在C#裡頭,必須將輸入的值轉成適當的格式,否則會編譯錯誤

輸入的方法:打開瀏覽器瀏覽網頁後,在網址最後面打上?number=10
web server透過URL擷取使用者的要求後,網頁就會呈現執行結果
這類傳遞變數值的方法稱為get method




5.
.cs檔案是寫程式碼的地方,程式碼與HTML分開不同檔案稱為code behind,中文翻譯是程式分離、後置程式

裡面有個void Page_Load()函式,相當於C語言的main函式。
網頁開啟後會自動執行此函式。
正確來說當網頁碰到"讀取網頁"的事件時
會觸發void Page_Load()


6.Web伺服器控制項跟HTML控制項是不同的東西。
Web控制項在伺服端執行,我們可以用程式設計方式控制這些項目,也可以透過控制項來執行程式
using System.Web.UI.Webcontrols


7.可以在web控制項加上"事件",執行程式。
web控制項跟HTML類似,每種標籤有屬性跟事件。所謂事件指的是"點滑鼠" "輸入文字" "滑鼠游標移動" "載入網頁"....。
 <asp:Button ID="Button1" runat="server" OnClick="fly" Text="Bomb" />
Onclick是事件,代表當滑鼠按button1時會去執行fly這個函式。可以由多個web控制項執行同個函式。

 protected void fly(object sender, EventArgs e)
    {
        Button btn = (Button)sender;//傳遞過來的物件,轉成button物件。
        Response.Write(btn.ID);//印出物件ID
        Response.Write("碰"+DateTime.Now.ToString());//印出現在時間
    }

8.時間
印出今天是禮拜幾:
DateTime.Now.DayOfWeek
DateTimey是struct資料型態
Now是static DateTime資料型態,系統跟我說這是物件。在我的理解,這是遞回式定義。有點像鏈結串列節點宣告
DayOfWeek是DateTime成員變數

按照過去C語言所學struct
應可以直接印出DateTime.DayOfWeek
但是在asp.net卻不行
系統跟我講CS0120: 需要有物件參考才能使用非靜態欄位、方法或屬性

這是因為DayOfWeek資料型態非靜態(static)
必須要建立(new)出物件才能使用
asp.net這邊用法直接用DateTime
要用Date必須透過屬於static的Now來存取Date

 Response.Write(DateTime.Now.Date.Date.Date.Date.Date.Date.Date + "<br>");
這句合法

Response.Write(DateTime.Now.Now);就不合法,browser告訴我"無法以執行個體參考存取; 請使用型別名稱代替"
意思是說DateTime.Now已經建立了物件????
這時再去呼叫static的型別就不合法。

心得:要了解static的本質


9.string.Format()格式化輸出字串:,如果嫌用加號串接字串麻煩,那麼用string.Format()來印出多個變數就很方便多了。

跟C語言的printf("%d %s",int1,string1);非常像。

  s = string.Format("i am {0},sum is {1}and {2} and {3}<br/>",i,sum,i,sum);
            Response.Write(s);
       
他的多載是去呼叫底下這個
public static string Format(string format, params object[] args);




10.每次按下按鈕之後,例如:button、imagebutton、linkbutton都會觸發一次Page_Load事件,會去執行Page_Load程式。
這就是所謂的PostBack。
即使有設定button_click每次按下按鈕都會先觸發page_load事件。
如果有程式只想在按下按紐才執行的話,那麼可以用Page.IsPostBack,判斷是否第一次執行網頁。Page.IsPostBack是布林值,false表示第一次執行網頁。



11.善用AutoPostBack屬性。textbox,checkbox,dropdownlist.....,這類控制項都有這個屬性,只要這類控制巷的內容有更動或選用,就會將資料提交給web server。然後啟動page_load事件以及使用者自訂事件。


12.一個.aspx裡面,只能有一個<form runat="server">

13.textbox接收使用者輸入的數字、字串一律當字串型態(String)處理,如果要進行數字加減乘除則必須使用Convert.ToInt32(TextBox1.Text)強制轉換成整數型態



14.EnableViewState屬性:讓web server忘掉控制項的上一動狀態。
若設定為true,web server會保留此控制項的上一動狀態或資料。若為false則web server不保留控制項的上一動資料,而是將控制項的狀態或資料回復到預設初始狀態。
例如:
將textbox的EnableViewState屬性關閉,且textbox的屬性text預設初始狀態是null(沒有任何字串)。如果打上文字KKK,sumit出去,那麼此時web server會知道textbox的text值從null變成KKK,而引發TextChanged事件。接著server會將extbox的text曾經變成KKK這件事給忘記,以為textbox屬性text的上一動狀態是null。因此即使我們一直用KKK字串sumit給server,對server來說textbox的text是不斷從null變成KKK,因此會一直觸發TextChanged事件。



15.

object sender:事件製造者

Label1.Text=sender.ToString();

2 則留言: