程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> 深入ASP.NET數據綁定(上)

深入ASP.NET數據綁定(上)

編輯:關於ASP.NET

在ASP.NET我們在使用Repeater,DetailsView,FormView,GridView等數據綁定模板時,都會使用 <%# Eval("字段名") %>或<%# Bind("字段名") %>這樣的語法來單向或雙向綁定數據。但是 我們卻很少去了解,在這些語法的背後,ASP.NET究竟都做了哪些事情來方便我們使用這樣的語法來綁定 數據。究竟解析這樣的語法是在編譯時,還是運行時?如果沒有深入去了解,我們肯定不得而知。這個簡 短的系列文章就是帶我們大家一起去深入探究一下ASP.NET綁定語法的內部機理,以讓我們更加全面的認 識和運用它。

事件的起因是,我希望動態的為Repeater控件添加行項模板,我可以通過實現ITempate接口的方式來 動態添加行模板。並希望它通過普通的頁面綁定語法來完成數據字段的綁定功能,如下就是一個簡單的例 子:

1: /// <summary>
2: /// Summary description for DynamicTemplate
3: /// </summary>
4: public class DynamicTemplate : ITemplate
5: {
6:     public DynamicTemplate()
7:     {
8:         //
9:         // TODO: Add constructor logic here
10:         //
11:     }
12:     #region ITemplate Members
13: 
14:     public void InstantiateIn(Control container)
15:     {
16:         TextBox textBox = new TextBox();
17:          textBox.Text = @"<%# Eval(""ID"") %>";
18:         container.Controls.Add(textBox);
19:     }
20:     #endregion
21: }

在這個例子中,我在模板中添加了一個TextBox控件,並指定它的綁定字段是“ID”。但是這做法,能 否實現我們實現我們需要的功能呢?答案是否定,每一行的TextBox的值都是"<%# Eval(""ID"") % >",而不會像我們希望的那樣去綁定ID字段。從結果來分析原因,我們可以非常容易得出,這段綁定 語法並沒有得到ASP.NET運行時的承認,那麼頁面中使用相同的語法為什麼可以呢?故事就是從這裡開始 的。

我們首先要去了解下,在頁面中使用這樣的語法ASP.NET都為我們做了哪些事情呢?要了解這個,我們 要找到.aspx文件在首次運行時動態編譯的程序集。

我們都知道,在ASP.NET運行時,也會把.aspx文件編譯成一個動態類,這個類是繼承於.aspx的Page指 令中Inherits屬性指定的類並且同時也直接實現了IHttpHandler接口。這個動態類會負責創建頁面中使用 的各種服務器端控件的實例,並且ASP.NET運行時會負責解析的編譯.aspx中存在的服務器端代碼(包括綁 定語法)並將這些代碼編譯到這個頁面類。WebSite工程和Web Application在頁面文件上有些不同, WebSite工程的每個頁面最多可以有兩個文件:.aspx和.aspx.cs文件;而在Web Application還可以包 括.aspx.designer.cs文件,這個文件所起的作用也非常有限,也就是為了能在頁面代碼中使用服務器端 、控件實例而定義的一個實例變量,僅此而已。所以在設計時WebSite具備更多的動態行為,而在運行時 WebSite工程和Web Application並沒有太大區別。

如何得到頁面的動態類呢?要首先得到這個頁所在的動態程序集,在Vista以前的操作系統上,一般是 在:%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files 文件夾下,而在 Vista中,而會在:%USERPROFILE%\AppData\Local\Temp\Temporary ASP.NET Files下。那麼如何快速得 到程序集的路徑和名稱?你可以讓你的Web工程動態編譯出錯(比如重復的類名),就可以快速定位到當 前動態程序集的目錄了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved