中國最大的web開發資源網站及技術社區,
asp + web forms ,一個微軟的新名詞,照它自己的話說,asp + web forms頁面框架是一個可升級的ngws runtime編程模型,可以在服務器上動態產生網頁。不太好懂是嗎,其實說白了,和html的表單一樣,但它可以在服務器端動態改變,而不像靜態html表單那樣一旦生成就無法改變,當然,用dhtml或remote script也可以做到動態改變,但畢竟不是很方便。那麼,究竟web forms是個什麼樣呢?其實你已經見過了,記得上次我給的那個例子嗎,沒錯,那就是一個web forms ,不過由於那個例子裡全是靜態html,所以當你按下”lookup”按鈕時只不過是提交一次表單而已,什麼都沒有發生,現在讓我們來看一個真正意義上的web forms ,它帶有一個廣告輪換控制,一個文本輸入框,一個選擇框、一個按鈕和一個文本標籤,代碼如下。
file : intro6.aspx
<html>
<head>
<link rel=stylesheethref=intro.css>
</head>
<script language=c# runat=server>
void submitbtn_click(object sender, eventargs e) {
message.text = hi + name.text + , you selected: + category.selecteditem;
}
</script>
<body>
<center>
<form action=intro6.aspx method=post runat=server>
<asp:adrotator advertisementfile=ads.xml bordercolor=black borderwidth=1 runat=server/>
<h3> name: <asp:textbox id=name runat=server/>
category:<asp:dropdownlist id=category runat=server>
<asp:listitem>psychology</asp:listitem>
<asp:listitem>business</asp:listitem>
<asp:listitem>popular_comp</asp:listitem>
</asp:dropdownlist>
<asp:button type=submit text=lookup onclick=submitbtn_click runat=server/>
<p>
<asp:label id=message runat=server/>
</form>
</center>
</body>
</html>
好了,現在我們來具體看一下這個asp+ 程序和asp到底有什麼不同,首先你可能注意到,原來asp的<% %>腳本定界符不見了,取而代之的是<script language=…>,說實話,原來我最痛恨的就是這個<% %>了,尤其是在html中混用的時候,簡直不像一種編程語言,你要從這樣一段程序裡看出程序流程來,簡直比登天還難,現在好了。當然這不是說你現在不能用<% %>,畢竟它是向前兼容asp的嘛,不過我還是盡量少用為妙。看下面一段:
<script language=c# runat=server>
void submitbtn_click(object sender, eventargs e) {
message.text = hi + name.text + , you selected: + category.selecteditem;
}
</script>
用過c的朋友是不是覺得很熟悉?沒錯,這是用c#寫的一個事件處理函數,void submitbtn_click(object sender , eventargs e) ,你可能一看就明白了,void代表該函數沒有返回值,該函數帶有兩個參數, 代碼只有一行,你可能注意到這行代碼中的message、name、category你並沒有定義,那麼它們從哪裡來的呢?看下面的代碼:
<form action=intro6.aspx method=post runat=server>
<asp:adrotator advertisementfile=ads.xml bordercolor=black borderwidth=1 runat=server/>
<h3> name: <asp:textbox id=name runat=server/>
category:<asp:dropdownlist id=category runat=server>
<asp:listitem>psychology</asp:listitem>
<asp:listitem>business</asp:listitem>
<asp:listitem>popular_comp</asp:listitem>
</asp:dropdownlist>
<asp:button type=submit text=lookup onclick=submitbtn_click runat=server/>
<p>
<asp:label id=message runat=server/>
</form>
這個表單的寫法和html表單完全不同了吧?首先,所有的表單項包括表單本身後面都加上了runat=server,這句話的意思就是說這個是服務器端控制項,另外像傳統表單的什麼<input type=text>等的寫法都變了,你仔細觀察一下可以看出,原來的文本框變為<asp:textbox>,選擇框變為<asp:dropdownlist> , 選擇框選項變為<asp:listitem>,而submit按鈕變為<asp: button>,這個按鈕對應的控制函數就剛才我提到的那個submitbtn_click函數,它是運行在服務器端的。另外還有一個服務器端控制<asp:label id=”message” runat=”server”/>,這個asp:label是傳統表單所沒有的,它是一個服務器端文本控制,那麼就存在一個問題,如果傳統的html裡沒有這個元素,那麼asp+是怎麼接收的呢?你運行一下這個程序,然後看一下html源碼,你會發現這麼一行:
<input type=hidden name=__viewstate value=a0z-1715863018__x>
對,asp+就是通過這個隱藏表單的形式傳遞過去的。
在<form>標記下有這麼一行代碼:
<asp:adrotator advertisementfile=ads.xml bordercolor=black borderwidth=1 runat=server/>
asp:adrotator,這也是一個服務器端控制,看名字你就知道了,廣告輪換嘛,不過相對asp,它現在不是使用內置組件,而是作為一個服務器端控制,控制它顯示的就是這個ads.xml ,代碼如下:
file ads.xml:
<advertisements>
<ad>
<imageurl>/quickstart/aspplus/images/banner1.gif</imageurl>
<targeturl>http://www.microsoft.com</targeturl>
<alternatetext>alt text</alternatetext>
<keyword>computers</keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>/quickstart/aspplus/images/banner2.gif</imageurl>
<targeturl>http://www.microsoft.com</targeturl>
<alternatetext>alt text</alternatetext>
<keyword>computers</keyword>
<impressions>80</impressions>
</ad>
<ad>
<imageurl>/quickstart/aspplus/images/banner3.gif</imageurl>
<targeturl>http://www.microsoft.com</targeturl>
<alternatetext>alt text</alternatetext>
<keyword>computers</keyword>
<impressions>80</impressions>
</ad>
</advertisements>
自己看一下吧,我就不詳細解釋了。
好了,現在再運行一遍這個程序,好好體會一下它與asp的區別,準備下次的內容。