国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

asp.net高級教程

2024-07-10 12:58:08
字體:
來源:轉載
供稿:網友

alpha版的時候ms叫它asp+,后來出了beta1版,就改名叫asp.net了,它到底是什么?這不僅僅是一個簡單的叫什么的問題,而是一個它到底是什么的問題。關于asp.net到底是什么,恐怕你已經看過不少這類文章,并且有自己的理解,但恐怕大多數人的理解不是那么正確。問個簡單的問題,asp.net和asp有什么關系?恐怕chinaasp .net版版主的看法代表了大多數人的理解:asp+就是比asp什么都多一點點而已:),真的是這樣嗎?讓我們看下面這個例子,這段代碼是我自己的asp.net bbs的用戶注冊模塊的提交按鈕點擊事件,作用是將用戶提交的數據存入數據庫中。

//提交按鈕點擊
public void onsubmit(object sender , eventargs e)
{
if (page.isvalid)
{
//數據入庫
try
{
bbsuser myuser = new bbsuser() ;
if(!myuser.getuser(txtusername.text))
{
myuser.createuser(bbsuser.createtype.create , txtusername.text , txtpassword.text ,
txtemail.text , txthomepage.text , "") ;
}
}
catch(exception exp)
{
#if debug
response.write ("出現異常:" + exp.message) ;
return ;
#endif//debug
server.transfer("error.aspx") ;
}
}
}

怎么樣,是不是和你原來習慣使用的asp有些區別呢?代碼中你見不到數據入庫,而全部封裝到bbsuser類的createuser方法中,或許你會說asp也行呀,做個函數或過程不就行了?是,的確如此,asp.net也可以直接把它做成一個過程然后來調用,但如果那樣的話,那就真的只比asp多一點點而已了。還是讓我們從頭說起吧。

asp.net和asp的最大區別在于編程思維的轉換,而不僅僅在于功能的增強。asp使用vbs/js這樣的腳本語言混合html來編程,而那些腳本語言屬于弱類型、面向結構的編程語言,而非面向對象,這就明顯產生以下幾個問題:
1、代碼邏輯混亂,難于管理:由于asp是腳本語言混合html編程,所以你很難看清代碼的邏輯關系,并且隨著程序的復雜性增加,使得代碼的管理十分困難,甚至超出一個程序員所能達到的管理能力,從而造成出錯或這樣那樣的問題。
2、代碼的可重用性差:由于是面向結構的編程方式,并且混合html,所以可能頁面原型修改一點,整個程序都需要修改,更別提代碼重用了。
3、弱類型造成潛在的出錯可能:盡管弱數據類型的編程語言使用起來回方便一些,但相對于它所造成的出錯幾率是遠遠得不償失的。
以上是語言本身的弱點,在功能方面asp同樣存在問題,第一是功能太弱,一些底層操作只能通過組件來完成,在這點上是遠遠比不上php/jsp,其次就是缺乏完善的糾錯/調試功能,這點上asp/php/jsp差不多。那么,asp.net有哪些改進呢?
asp.net擺脫了以前asp使用腳本語言來編程的缺點,理論上可以使用任何編程語言包括c++ , vb , js等等,當然,最合適的編程語言還是ms為.net frmaework專門推出的c#(讀csharp),它可以看作是vc和java的混合體吧,盡管ms自己講c#內核中更多的象vc,但實際上我還是認為它和java更象一些吧。首先它是面向對象的編程語言,而不是一種腳本,所以它具有面向對象編程語言的一切特性,比如封裝性、繼承性、多態性等等,這就解決了剛才談到的asp的那些弱點。封裝性使得代碼邏輯清晰,易于管理,并且應用到asp.net上就可以使業務邏輯和html頁面分離,這樣無論頁面原型如何改變,業務邏輯代碼都不必做任何改動;繼承性和多態性使得代碼的可重用性大大提高,你可以通過繼承已有的對象最大限度保護你以前的投資。并且c#和c++、java一樣提供了完善的調試/糾錯體系。好了,一口氣說了這么些理論性的東西,不如結合一個實例來具體說明,在以后的內容里我將結合一個論壇的實例來具體說明asp.net的開發。

對了,要說明一點,這個教程并不是asp.net的入門教程,我假設你對asp.net、c#和面向對象編程有一定的了解,如果不是這樣的話,請先閱讀有關文章或教程。

asp.net和asp的最大區別在于編程思維的轉換,那么我們現在就來看看如何轉換編程思想。以前的web編程從cgi(perl)到asp,php,jsp的編程過程都是這樣:美工人員給出頁面原型,編程人員照頁面填空,最后堆起來算完,下次如果原型變動,那么就再修改程序,這樣業務邏輯和html頁面混在一起,可以說是事倍功半。那么,現在有了asp.net,我們應該怎么做呢?

讓我們找個實際的例子,就拿論壇來說吧,先從頂至下看看它的業務邏輯。我們可以把一個論壇視做一個對象,它有自己的屬性和方法,常見的屬性有名稱、貼子數、用戶數、版面數等等,這樣的話,我們就可以這樣來構造論壇對象:

namespace myownclass
{
using system;
using system.data.sql ;
using system.data ;

////////////////////////////////////////////////////////////////////
//
// class name : bbs
//
// description: 論壇類,構造一個論壇對象
//
// date: 2000/02/03
//
/// ////////////////////////////////////////////////////////////////
public class bbs
{
//私有變量
private string m_strtitle ; //bbs名稱
private int m_intforumcount ; //版面數
private int m_inttopiccount ; //貼子數
private int m_intusercount ; //注冊用戶數

//屬性
public string title
{
get
{
return m_strtitle ;
}
}

public int forumcount
{
get
{
return m_intforumcount ;
}
}

public int topiccount
{
get
{
return m_inttopiccount ;
}
}

public int usercount
{
get
{
return m_intusercount ;
}
}

//構造函數
public bbs(string a_strtitle)
{
//
// todo: add constructor logic here
//
m_strtitle = a_strtitle ;

//讀取數據庫
myconnection myconn = new myconnection() ;
sqlcommand mycommand = new sqlcommand() ;
mycommand.activeconnection = myconn ;
mycommand.commandtext = "up_getbbsinfo" ; //調用存儲過程
mycommand.commandtype = commandtype.storedprocedure ;

try
{
myconn.open() ;
sqldatareader myreader ;
mycommand.execute(out myreader) ;
if (myreader.read())
{
m_intforumcount = (int)myreader<"forumcount"> ;
m_inttopiccount = (int)myreader<"topiccount"> ;
m_intusercount = (int)myreader<"usercount"> ;
}
else
{
throw(new exception("表或存儲過程不存在")) ;
}

//清場
myreader.close();
myconn.close() ;
}
catch(sqlexception e)
{
throw(new exception("數據庫出錯:" + e.message)) ;
}

}
}
}

這個bbs類很簡單,有四個私有變量,對應四個只讀屬性,方法只有一個帶參數的構造函數,作用是從數據庫中讀取相應的數據,填充四個私有變量。類構造好了,讓我們看看如何使用,在需要顯示論壇這些屬性的頁面文件里(.aspx)里,構造四個label,象這樣:
<table width=140 cellpadding=4 cellspacing=1 border=0>
<tr>
<td class=cn>
<font color=white>注冊用戶數:</font>
</td>
<td>
<asp:label id="lblusercount" runat=server class=cn></asp:label>
</td>
</tr>
<tr>
<td class=cn>
<font color=white>貼子總數:</font>
</td>
<td>
<asp:label id="lbltopiccount" runat=server class=cn></asp:label>
</td>
</tr>
<tr>
<td class=cn>
<font color=white>版面數:</font>
</td>
<td>
<asp:label id="lblforumcount" runat=server class=cn></asp:label>
</td>
</tr>
</table>
然后在對應的c#文件里這樣使用:

protected void page_init(object sender, eventargs e)
{
//
// codegen: this call is required by the asp+ windows form designer.
//
initializecomponent();

//初始化頁面對象
//創建bbs對象
try
{
m_objbbs = new bbs("鷹翔山莊論壇") ;
}
catch(exception exp)
{
#if debug
response.write ("初始化bbs對象出錯:" + exp.message + "
") ;
return ;
#endif//debug
server.transfer("error.aspx") ;
}

//論壇名稱
lblbbsname.forecolor = color.white ;
lblbbsname.text = m_objbbs.title ;

//用戶數
lblusercount.forecolor = color.white ;
lblusercount.text = m_objbbs.usercount.tostring() ;

//文章數
lbltopiccount.forecolor = color.white ;
lbltopiccount.text = m_objbbs.topiccount.tostring() ;

//版面數
lblforumcount.forecolor = color.white ;
lblforumcount.text = m_objbbs.forumcount.tostring() ;
}

看出這樣使用的好處嗎?對,就是業務邏輯和html代碼分開,這樣無論頁面原型如何修改,代碼都不需要做絲毫改動。bbs對象構造好了,讓我們看看論壇的其他對象,他們分別是用戶(bbsuser)、版面(forum)和貼子(topic) , 我將在下節的內容里詳細解釋。(待續)
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 久治县| 南召县| 广河县| 资兴市| 罗田县| 阿城市| 渭源县| 朔州市| 安溪县| 新绛县| 沂水县| 玛纳斯县| 西乌| 田阳县| 平顺县| 黔西| 泸溪县| 定西市| 正定县| 定州市| 保德县| 潢川县| 普安县| 佛坪县| 成都市| 西乌| 天门市| 河西区| 甘谷县| 嵩明县| 青神县| 夏津县| 澄江县| 益阳市| 延庆县| 赤峰市| 武威市| 九龙县| 马关县| 湖南省| 永清县|