惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Schneier on Security
I
InfoQ
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
O
OpenAI News
W
WeLiveSecurity
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
Cloudbric
Cloudbric
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
NISL@THU
NISL@THU
T
Tailwind CSS Blog
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
D
DataBreaches.Net
B
Blog RSS Feed
N
News and Events Feed by Topic
N
News and Events Feed by Topic
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
腾讯CDC
Latest news
Latest news
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
V
V2EX
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
Help Net Security
Help Net Security

博客园 - InFuture

变成百万富翁的二十五种方法 今天终于测试解决了WCF传递大数据量的问题 关于工作流设计方面的一些经验总结 Telnet客户端 字符串表达式求值(转) silverlight DataGrid模板列的动态生成 关于事件处理的完整框架Event,delegate,event args,无图有真相。 关于树形结构父类查子类,子类查父类的方法 最近准备整理一下手头资料,开发一个工作流和表单管理系统 今天装好了window 7 Silverlight 客户端如何访问WCF 如何让用户控件占满全部页面,silverlight用户控件开发问题 wpf 数据绑定有关讲解 免费的微软OneCare防病毒软件 Visual Studio 2008 SP1: EntityDataSource Where Clause(转载) Visual Studio 2008 SP1: EntityDataSource for ASP.Net (转载) 今天装了VS2008 Sp1!真是非常激动!(VS2008 sp1下载地址) ASP.NET里的支架:Dynamic Data Support(转载) VS2008的黑色皮肤
ASP.NET 3.5 Extensions: Dynamic Data Web Site 要點整理(转载)
InFuture · 2008-08-30 · via 博客园 - InFuture

前面的練習當 中,很多地方都是由專案範本、IDE、以及 Dynamic Data 框架幫我們處理掉,我們就只是用滑鼠拖拉幾下,再到 web.config 中設定一下屬性就完成了。即使做了練習,可能還會有一點知其然不知其所以然的感覺:為什麼這樣網站就可以 run 了?其中各個環節是怎麼串起來的?因此,這裡簡短地將前面練習過程中幾個要點整理一下,希望能讓 Dynamic Data Web Site 的拼圖更完整。

以下就分別針對建立 Dynamic Data Web Site 的過程,以及網頁客製化的部份分別整理其重點。

關於建立 Dynamic Data Web Site 的幾個重點

  • 若要迅速建立一個具備增刪改查的資料維護網站,可用 VS2008 直接 New 一個 Dynamic Data Web Site(當然你必須先安裝 ASP.NET 3.5 Extensions preview 版)。透過此方式建立的網站,主要是運用 Dynamic Data 的 scaffolding 功能。
  • Dynamic Data Web Site 專案範本會自動產生相關的樣板網頁及樣式,包括一個可瀏覽資料表清單的首頁(Default.aspx)。當然,它不會知道你想要處理哪些資料表,因此這 部份的空白須由你來填補。說得更明白些,就是要建立 Data Context 類別。Data Context 類別有點像是一個資料庫,裡面包含許多類別,而每個類別都是對應到實體資料庫中的一個資料表。
  • 建立 Data Context 類別的方法,是在專案中加入一個 LINQ to SQL class。若將它命名為 Foo.dbml,那麼除了產生 Foo.dbml(這是個 XML 檔案),還會產生 Foo.dbml.layout 以及 Foo.designer.cs,前者只存放設計檢視的畫面編排資訊,後者才包含真正的 Data Context 類別,而其類別名稱會是 FooDataContext。你從 Server Explorer 中拖到 .Foo.dbml 設計區域的那些資料表,IDE 都會幫你在 .designer.cs 中建立對應的類別。換句話說,IDE 和 Dynamic Data 框架自動幫你處理了物件/關聯對應(object-relation mapping)的繁瑣工作。
  • 當你瀏覽 Default.aspx 時,Dynamic Data 框架會去你指定的 Data Context 類別中取得資料表清單及其欄位資料。那麼如何告訴 Dynamic Data 框架該使用哪個 Data Context 類別?答案是 Web.config 裡面的 <dynamicData> 元素的 dataContextType 屬性。

網頁客製化

  • 維護資料表的樣板網頁放在 App_Shared\DynamicDataPages 目錄下,共有三個檔案:ListTemplate.aspx、DetailsTemplate.aspx、以及 ListDetailstemplate.aspx。當你在網站首頁(Default.aspx)點擊某個資料表連結,Dynamic Data 框架就會使用這些樣板來呈現資料表的欄位資料。
  • 若要客製化資料表維護網頁,可將上述的樣板網頁複製到網站根目錄下的特定資料夾,並將檔名中的 "Template" 去除。所謂的特定資料夾,指的是該資料夾名稱必須跟資料表名稱一樣。例如,想要自訂 Customers 資料表的維護頁面,就可以在網站根目錄下建立名為 Customers 的資料夾,然後將樣板檔複製到該資料夾下,再修改它們。從 web.config 中的 <dynamicData> 元素的 <mappings> 子元素的 patterns 屬性可看出資料夾命名的規則,以及其名稱與瀏覽網站時的 URI 有何關聯。
  • 你可以在自訂網頁中使用 <DynamicField> 標籤來定義該資料表維護頁面要有哪些欄位,以及各欄位的顯示樣式、欄位標題(HeaderText 屬性)、欄位的顯示/編輯控制項(RenderHint 屬性)。

自訂欄位驗證

  • ASP.NET 3.5 Extensions 內建三個欄位驗證特徵項 (validation attributes),可用來套用至特定欄位,它們是:RequiredAttributeRegexAttribute、以及 RangeAttribute
  • 套用欄位驗證特徵項的方法:先在 App_Code 資料夾中建立一個對應某 entity class 的 partial 類別(如第一篇的 Customer.cs),然後將驗證特徵項套用至類別。參考以下範例:

    using System.Web.DynamicData;

    [Required("CustomerID", ErrorMessage="客戶編號不可空白!")]


    public

    partial class Customer
    {
    }
     
  • 除了內建的驗證特徵項,開發人員也可以自訂其他驗證規則,做法是在自訂的 entity class 中「實作」On<FieldName>Changing 方法。這裡的「實作」須用到 partial methods 語法。參考以下範例:

    public partial class Customer
    {

    partial void OnCustomerIDChanging(string value)
        {
            if (String.IsNullOrEmpty(value))
            {
                throw new Exception("客戶編號不可空白!");
            }
        }
    }

自訂欄位顯示/編輯控制項

  • ASP.NET Dynamic Data 框架會根據欄位型態自動使用內建的控制項來顯示及編輯欄位值,例如:文字類型的欄位就會使用 TextBox。這些顯示/編輯欄位的控制項叫做「動態資料欄位」(dynamic data fields),它們都是 user controls。你可以在網站的 App_Shared\DynamicDataFields 資料夾中找到這些內建的動態資料欄位控制項。
  • 你也可以自行設計動態資料欄位控制項,以補內建動態資料欄位控制項之不足。作法是在 App_Shared\DynamicDataFields 資料夾上點右鍵,Add New Item,然後選擇 "Dynamic Data Field"。此方式會幫你產生兩個 user controls,一個用來顯示欄位值,一個用來編輯欄位值,而且它們都是 single file 的寫法(而非 code-behind 寫法)。
  • 動態資料欄位控制項必須繼承自父類別:System.Web.DynamicData.FieldTemplateUserControlBase
  • 設計好動態資料欄位控制項之後,可利用 RenderHint 屬性來指定某個欄位要用你自己撰寫的控制項來顯示和編輯,作法有兩種:
    (1) 在自訂網頁(如前例的 Customers\ListDetails.aspx)中指定 <DynamicField> 標籤的 RenderHint 屬性。如下所示:

    <asp:DynamicField DataField="OrderDate" HeaderText="訂單日期"

    RenderHint="CalendarDate" />

    (2) 在自訂 entity class 中套用 RenderHint 特徵項,如下所示:

    [RenderHint("OrderDate", "CalendarDate")]
    public partial class Order
    {
    }

    其中第一個參數是欄位名稱,第二個參數就是你的動態資料欄位控制項類別名稱。

OK! 有關 Dynamic Data Web site 的部分就先整理到這邊。