在ASP.NET中完成MVC模式(一)
發(fā)表時間:2023-08-05 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]在ASP.NET中實現(xiàn)Model-View-Controller模式(一) 背景: 當(dāng)利用ASP.NET創(chuàng)建Web應(yīng)用程序時,基于程序的復(fù)雜性,必須把程序分割成不同的部分以減少代碼的重復(fù)及減少日后變...
在ASP.NET中實現(xiàn)Model-View-Controller模式(一)
背景:
當(dāng)利用ASP.NET創(chuàng)建Web應(yīng)用程序時,基于程序的復(fù)雜性,必須把程序分割成不同的部分以減少代碼的重復(fù)及減少日后變革時所引起的改動。
實現(xiàn)策略:
為了解釋如何在ASP.NET中實現(xiàn)(MVC)模型-視圖-控制器模式,以及說明將軟件分離成模型、視圖、及控制器角色的好處,在此以一個示例程序為例進(jìn)行說明。這個示例程序是一個帶有下拉框的單頁程序,它的功能是顯示數(shù)據(jù)庫中的數(shù)據(jù)。如下圖。
當(dāng)用戶在下拉框中選擇了一個記錄,并單擊Submit按鈕的時候,程序從數(shù)據(jù)庫中搜索與選中記錄相關(guān)的數(shù)據(jù)庫記錄,并以列表的形式顯示出來。下面,將以三種不同的實現(xiàn)方式進(jìn)行實現(xiàn)。
單頁模式
在ASP.NET中有許多解決這個問題的辦法,其中最簡單也是最直接的辦法就是把所有的代碼都放到一個文件中,并起名為Solution.aspx,實現(xiàn)代碼如下:
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.SqlClient" %>
<html>
<head>
<title>start</title>
<script language="c#" runat="server">
void Page_Load(object sender, System.EventArgs e)
{
String selectCmd = "select * from Recording";
SqlConnection myConnection =
new SqlConnection(
"server=(local);database=recordings;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd,
myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Recording");
recordingSelect.DataSource = ds;
recordingSelect.DataTextField = "title";
recordingSelect.DataValueField = "id";
recordingSelect.DataBind();
}
void SubmitBtn_Click(Object sender, EventArgs e)
{
String selectCmd =
String.Format(
"select * from Track where recordingId = {0} order by id",
(string)recordingSelect.SelectedItem.Value);
SqlConnection myConnection =
new SqlConnection(
"server=(local);database=recordings;Trusted_Connection=yes");
SqlDataAdapter myCommand = new SqlDataAdapter(selectCmd,
myConnection);
DataSet ds = new DataSet();
myCommand.Fill(ds, "Track");
MyDataGrid.DataSource = ds;
MyDataGrid.DataBind();
}
</script>
</head>
<body>
<form id="start" method="post" runat="server">
<h3>Recordings</h3>
Select a Recording:<br />
<asp:dropdownlist id="recordingSelect" runat="server" />
<asp:button runat="server" text="Submit" OnClick="SubmitBtn_Click" />
<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>
這個實現(xiàn)文件包含了模型、視圖、控制器這三種角色,但是沒有將它們分割為不同的文件或類。其中的視圖對象用HTML實現(xiàn),用一個數(shù)據(jù)綁定控件來顯示從數(shù)據(jù)庫返回的DataSet中的數(shù)據(jù)。模型角色在Page_Load 和 SubmitBtn_Click函數(shù)中實現(xiàn)。而控制器角色并沒有顯式的實現(xiàn),而是由ASP.NET隱式實現(xiàn)。程序運行時,當(dāng)用戶發(fā)出頁面的請求,頁面隨著用戶的