在ASP.NET中完成MVC模式(二)
發(fā)表時(shí)間:2023-08-01 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在ASP.NET中實(shí)現(xiàn)Model-View-Controller模式(二) MVC模式形容這種實(shí)現(xiàn)方式是一種被動(dòng)的實(shí)現(xiàn)機(jī)制,ASP.NET充當(dāng)了程序執(zhí)行中的控制器的角色,但程序員必須將具體的事件處理...
在ASP.NET中實(shí)現(xiàn)Model-View-Controller模式(二)
MVC模式形容這種實(shí)現(xiàn)方式是一種被動(dòng)的實(shí)現(xiàn)機(jī)制,ASP.NET充當(dāng)了程序執(zhí)行中的控制器的角色,但程序員必須將具體的事件處理方法添加到事件的響應(yīng)函數(shù)中。如在這個(gè)例子中,控制器在頁面加載之前調(diào)用Page_Load函數(shù)并執(zhí)行其中的代碼,當(dāng)用戶點(diǎn)擊Submit按鈕時(shí)由系統(tǒng)調(diào)用SubmitBtn_Click函數(shù)并執(zhí)行。
這種將代碼都包含在一個(gè)文件中的實(shí)現(xiàn)方式非常的直接,而且當(dāng)應(yīng)用程序很小并不經(jīng)常修改的時(shí)候也可以說是一種好的方法,但是如果下面的一些情況出現(xiàn)的話你也許會(huì)開始考慮修改這種實(shí)現(xiàn)方法:
使編程的工作并行并減少由此帶來的發(fā)生錯(cuò)誤的可能性。為了增加工作的并行性,提高效率,你可能想讓不同的人編寫視圖的代碼及模型代碼并盡力減少這種工作方式所帶來的出錯(cuò)的可能性。例如:當(dāng)所有的代碼都在一個(gè)文件中的話,那么一個(gè)編程人員可能會(huì)在改變DataGrid顯示格式的時(shí)候無意中修改數(shù)據(jù)訪問的代碼。這種錯(cuò)誤是很難被發(fā)現(xiàn)的,直到頁面整體被編譯的時(shí)候才會(huì)顯現(xiàn)出來。。
使你的數(shù)據(jù)訪問代碼在其它頁面中重用。在這種單文件的實(shí)現(xiàn)方式中,除了拷貝代碼,沒有其它的方法能夠做到代碼的重用?截惖拇a是很難被維護(hù)的,因?yàn)橐坏┐a發(fā)生了變化,你必須在所有的頁面都進(jìn)行修改。
為了避免上面這些情況的發(fā)生,ASP.NET引入了代碼分離(Code-behind)機(jī)制。
用代碼分離機(jī)制進(jìn)行重構(gòu)
Microsoft Visual Studio .NET中的代碼分離機(jī)制使視圖層的代碼與模型及控制器的代碼能夠很容易的分離。每個(gè)ASP.NET頁面都有一種機(jī)制,能夠使其要調(diào)用的方法在一個(gè)與其分離的類中實(shí)現(xiàn)。這種方式使用起來非常的方便,而且也可以利用Visual Studio .NET中的一些其它特性共同完成開發(fā)工作。比如如當(dāng)你利用代碼分離的機(jī)制開發(fā)你的頁面的時(shí)候,可以利用智能感知(IntelliSense technology)顯示出一個(gè)可用方法的列表方便編程。而智能感知技術(shù)在.aspx頁面中是不能使用的。
下面給出的是上面例子利用代碼分離機(jī)制的實(shí)現(xiàn)。
視圖部分:
視圖層的代碼現(xiàn)在一個(gè)單獨(dú)的文件中實(shí)現(xiàn)。Solution.aspx:
<%@ Page language="c#" Codebehind="Solution.aspx.cs"
AutoEventWireup="false" Inherits="Solution" %>
<html>
<head>
<title>Solution</title>
</head>
<body>
<form id="Solution" method="post" runat="server">
<h3>Recordings</h3>
Select a Recording:<br/>
<asp:dropdownlist id="recordingSelect" runat="server" />
<asp:button id="submit" runat="server" text="Submit"
enableviewstate="False" />
<p/>
<asp:datagrid id="MyDataGrid" runat="server" width="700"
backcolor="#ccccff" bordercolor="black" showfooter="false"
cellpadding="3" cellspacing="0" font-name="Verdana" font-size="8pt"
headerstyle-backcolor="#aaaadd" enableviewstate="false" />
</form>
</body>
</html>
大部分代碼都與前面的解決方案的代碼相同。主要的不同點(diǎn)是第一行:
<%@ Page language="c#" Codebehind="Solution.aspx.cs"
AutoEventWireup="false" Inherits="Solution" %>
這行告訴ASP.NET執(zhí)行環(huán)境,這個(gè)頁面的具體實(shí)現(xiàn)機(jī)制在一個(gè)單獨(dú)的類中。因?yàn)檫@個(gè)頁面是獨(dú)立的,因此如果數(shù)據(jù)訪問的代碼發(fā)生變化,這個(gè)頁面并不需要做任何改動(dòng)。同樣,一些設(shè)計(jì)師也可以改變這個(gè)頁面的代碼而不會(huì)引起任何數(shù)據(jù)訪