天天看點

精進不休 .NET 4.0 (3) - asp.net 4.0 新特性之動态資料(Dynamic Data)增強

<a href="http://webabcd.blog.51cto.com/1787395/341053" target="_blank">[索引頁]</a>

<a href="http://cid-ebc0a6c186317ea6.office.live.com/self.aspx/Share/VS2010.rar" target="_blank">[源碼下載下傳]</a>

精進不休 .NET 4.0 (3) - asp.net 4.0 新特性之動态資料(Dynamic Data)增強, AJAX增強; IDE之Visual Studio 2010增強

介紹

asp.net 4.0 的新增功能

EnableDynamicData - 啟用 Dynamic Data 的功能 

DynamicHyperLink - 用于友善地生成在 Dynamic Data 站點中導航的超級連結 

Entity Template - 實體模闆是一個新增的用于自定義資料顯示的模闆,其基于 FormView 控件做資料呈現 

DisplayAttribute - 新增的一個 Attribute(可以設定字段的Name和Order) 

其它新特性

AJAX 增強 

Visual Studio 2010 增強 

示例

1、Dynamic Data 之 EnableDynamicData

Demo/EnableDynamicData.aspx

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EnableDynamicData.aspx.cs" 

        Inherits="DynamicData.Demo.EnableDynamicData" %&gt; 

&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"&gt; 

&lt;html xmlns="http://www.w3.org/1999/xhtml"&gt; 

&lt;head runat="server"&gt; 

        &lt;title&gt;&lt;/title&gt; 

&lt;/head&gt; 

&lt;body&gt; 

        &lt;form id="form1" runat="server"&gt; 

        &lt;div&gt; 

                &lt;!--收集并顯示由 Dynamic Data 所做的資料驗證的結果--&gt; 

                &lt;asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true"HeaderText="驗證錯誤的清單" /&gt; 

                &lt;asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" DataKeyNames="ProductID" 

                        DataSourceID="EntityDataSource1"&gt; 

                        &lt;Fields&gt; 

                                &lt;asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" /&gt; 

                        &lt;/Fields&gt; 

                &lt;/asp:DetailsView&gt; 

                &lt;asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=AdventureWorksEntities" 

                        DefaultContainerName="AdventureWorksEntities" EnableDelete="True" EnableInsert="True" 

                        EnableUpdate="True" EntitySetName="Products" EnableFlattening="False"&gt; 

                &lt;/asp:EntityDataSource&gt; 

        &lt;/div&gt; 

        &lt;/form&gt; 

&lt;/body&gt; 

&lt;/html&gt; 

Demo/EnableDynamicData.aspx.cs

using System; 

using System.Collections.Generic; 

using System.Linq; 

using System.Web; 

using System.Web.UI; 

using System.Web.UI.WebControls; 

namespace DynamicData.Demo 

        public partial class EnableDynamicData : System.Web.UI.Page 

        { 

void Page_Init() void Page_Init() 

                { 

                        /* 

                         * EnableDynamicData - 啟用 Dynamic Data 的功能(包括字段模闆,資料驗證在内的等等 Dynamic Data 的功能都會被啟用) 

                         *         第一個參數:需要啟用 Dynamic Data 功能的實體類型 

                         *         第二個參數:當控件啟用插入模闆的時候,為字段指定預設值 

                         */ 

                        DetailsView1.EnableDynamicData(typeof(Product), new { Name = "預設名稱" }); 

                } 

void Page_Load() void Page_Load(object sender, EventArgs e) 

        } 

}

2、Dynamic Data 之 DynamicHyperLink

Demo/DynamicHyperLinkDemo.aspx

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicHyperLinkDemo.aspx.cs" 

        Inherits="DynamicData.Demo.DynamicHyperLinkDemo" %&gt; 

                &lt;!-- 

                        DynamicHyperLink - 用于友善地生成在 Dynamic Data 站點中導航的超級連結 

                                Action - 指定 Action(可選值有 List|Details|Edit|Insert) 

                                TableName - 需要連結到的目标表名 

                                ContextTypeName - 上下文的類全名 

                --&gt; 

                &lt;asp:DynamicHyperLink ID="ListHyperLink" runat="server" Text="全部産品" Action="List" 

                        TableName="Products" ContextTypeName="DynamicData.AdventureWorksEntities"&gt;    

                &lt;/asp:DynamicHyperLink&gt; 

                        生成的 HTML 代碼如下: 

                        &lt;a id="ListHyperLink" href="/Products/List.aspx"&gt;全部産品&lt;/a&gt; 

3、Dynamic Data 之 Entity Template

DynamicData/EntityTemplates/Products.ascx

&lt;%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Products.ascx.cs" Inherits="DynamicData.DynamicData.EntityTemplates.Products" %&gt; 

&lt;!-- 

        Entity Template - 實體模闆是一個新增的用于自定義資料顯示的模闆,其是基于 FormView 控件做資料呈現的 

        以下示範如何實作自定義的 Entity Template ,進入産品詳情頁可檢視此 Demo 的效果 

        以下内容會被替換到 PageTemplates/Details.aspx &lt;asp:DynamicEntity runat="server" /&gt; 中去 

--&gt; 

&lt;tr&gt; 

        &lt;td&gt; 

                産品ID 

        &lt;/td&gt; 

                &lt;asp:DynamicControl ID="DynamicControl1" runat="server" DataField="ProductID" /&gt; 

&lt;/tr&gt; 

                産品名稱 

                &lt;asp:DynamicControl ID="DynamicControl2" runat="server" DataField="Name" /&gt; 

DynamicData/EntityTemplates/Products.ascx.cs

namespace DynamicData.DynamicData.EntityTemplates 

        // 自定義的 EntityTemplate 的基類是 System.Web.DynamicData.EntityTemplateUserControl 

        public partial class Products : System.Web.DynamicData.EntityTemplateUserControl 

4、Dynamic Data 之 DisplayAttribute

Demo/Metadata.cs

using System.ComponentModel.DataAnnotations; 

namespace DynamicData 

        [MetadataType(typeof(Product_Metadata))] 

        public partial class Product 

        public class Product_Metadata 

                // DisplayAttribute - 新增的一個 Attribute 

                //         Name - 指定字段的名稱(參考 Demo/EnableDynamicData.aspx ,其“ProductID”字段顯示為“産品ID”) 

                //         Order - 指定字段在所有字段中的排序 

                [Display(Name="産品ID", Order=0)] 

                public object ProductID { get; set; } 

                [Display(Name = "産品名稱", Order = 1)] 

                public object Name { get; set; } 

                [Range(1, 100, ErrorMessage="{0}的範圍必須是{1}-{2}")] 

                [Display(Name = "單價", Order = 2)] 

                public object ListPrice; 

5、Dynamic Data 之 其它新特性

Demo/Others.aspx

&lt;%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Others.aspx.cs" Inherits="DynamicData.Demo.Others" %&gt; 

        &lt;style&gt; 

                body 

                        font-size: 12px; 

                textarea 

                        width: 99%; 

        &lt;/style&gt; 

                &lt;p&gt; 

                        1、DynamicDataManager 控件新增了 DataControls 屬性,在其内可以聲明多個 DataControlReference,用于指定哪些控件需要啟用 Dynamic Data 的功能 

                        &lt;textarea&gt; 

                                &lt;asp:DynamicDataManager ID="DynamicDataManager1" runat="server"AutoLoadForeignKeys="true"&gt;    

                                        &lt;DataControls&gt;    

                                                &lt;asp:DataControlReference ControlID="GridView1" /&gt;    

                                        &lt;/DataControls&gt; 

                                &lt;/asp:DynamicDataManager&gt;    

                                &lt;asp:GridView id="GridView1" runat="server" /&gt; 

                        &lt;/textarea&gt; 

                &lt;/p&gt; 

                        2、新增了一個 EnumDataTypeAttribute,可以聲明某字段為枚舉類型。對應的字段模闆裡也新增了 Enumeration.ascx 和 Enumeration_Edit.ascx 

                        3、新增了兩個資料類型    

                        &lt;ul&gt; 

                                &lt;li&gt;[DataType(DataType.EmailAddress)] 對應的字段模闆裡也新增了 EmailAddress.ascx&lt;/li&gt; 

                                &lt;li&gt;[DataType(DataType.Url)] 對應的字段模闆裡也新增了 Url.ascx&lt;/li&gt; 

                        &lt;/ul&gt; 

                        4、支援多對多的關系(限 Entity Framework 模型)。對應的字段模闆裡也新增了 ManyToMany.ascx 和 ManyToMany_Edit.ascx 

                        5、原 Dynamic Data 會自動地将類型為 Boolean, Enumeration, ForeignKey 的字段作為查詢條件輸出到頁面上。現在新增了 Filter Template(查詢模闆),可以對這些查詢條件的樣式和邏輯等做自定義修改(詳見 DynamicData/Filters 下的檔案) 

&lt;/html&gt;

6、AJAX 增強

List.html

        &lt;p&gt; 

                1、Visual Studio 2010 内包含了 jQuery 

        &lt;/p&gt; 

                2、JavaScript 架構的 CDN 

                &lt;ul&gt; 

                        &lt;li&gt;jQuery - &lt;script src="http://ajax.Microsoft.com/ajax/jquery-1.3.2.js" type="text/javascript"&gt;&lt;/script&gt;&lt;/li&gt; 

                        &lt;li&gt;asp.net ajax - &lt;asp:ScriptManager ID=”ScriptManager1” EnableCdn=”true” runat=”server” /&gt;&lt;/li&gt; 

                &lt;/ul&gt; 

                3、asp.net ajax 的按需加載腳本,如下所示 

                &lt;textarea rows="10"&gt; 

&lt;asp:ScriptManager ID="ScriptManager1" AjaxFrameworkMode="Explicit" runat="server"&gt; 

        &lt;Scripts&gt; 

                &lt;asp:ScriptReference Name="MicrosoftAjaxCore.js" /&gt; 

                &lt;asp:ScriptReference Name="MicrosoftAjaxComponentModel.js" /&gt; 

                &lt;asp:ScriptReference Name="MicrosoftAjaxSerialization.js" /&gt; 

                &lt;asp:ScriptReference Name="MicrosoftAjaxNetwork.js" /&gt;         

        &lt;/Scripts&gt; 

&lt;/asp:ScriptManager&gt; 

                &lt;/textarea&gt; 

7、Visual Studio 2010 增強

&lt;%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" 

        CodeBehind="List.aspx.cs" Inherits="VisualStudio.List" %&gt; 

&lt;asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"&gt; 

&lt;/asp:Content&gt; 

&lt;asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"&gt; 

                1、HTML 和 JavaScript 支援 Code Snippets(代碼片段) 

                        &lt;li&gt;組合鍵 ctrl+k ctrl+x 用于插入代碼片段&lt;/li&gt; 

                        &lt;li&gt;組合鍵 ctrl+k ctrl+b 用于調出代碼片段管理器&lt;/li&gt; 

                        &lt;li&gt; 

                                比如要在 HTML 的代碼片段中增加一個 fieldset 的代碼片段,可參考如下寫法,将其儲存為 snippet 格式的檔案儲存到“我的檔案\Visual Studio 2010\Code Snippets\Visual Web Developer\My HTML Snippets” 

                                &lt;textarea rows="6"&gt; 

&lt;CodeSnippet Format="1.1.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet"&gt; 

        &lt;Header&gt; 

                &lt;Title&gt;fieldset&lt;/Title&gt; 

                &lt;Author&gt;webabcd&lt;/Author&gt; 

                &lt;Shortcut&gt;fieldset&lt;/Shortcut&gt; 

                &lt;Description&gt;Markup snippet for a fieldset&lt;/Description&gt; 

                &lt;SnippetTypes&gt; 

                        &lt;SnippetType&gt;Expansion&lt;/SnippetType&gt; 

                        &lt;SnippetType&gt;SurroundsWith&lt;/SnippetType&gt; 

                &lt;/SnippetTypes&gt; 

        &lt;/Header&gt; 

        &lt;Snippet&gt; 

                &lt;Declarations&gt; 

                        &lt;Literal&gt; 

                                &lt;ID&gt;legend&lt;/ID&gt; 

                                &lt;ToolTip&gt;legend&lt;/ToolTip&gt; 

                                &lt;Default&gt;标題&lt;/Default&gt; 

                        &lt;/Literal&gt; 

                                &lt;ID&gt;content&lt;/ID&gt; 

                                &lt;ToolTip&gt;content&lt;/ToolTip&gt; 

                                &lt;Default&gt;content&lt;/Default&gt; 

                &lt;/Declarations&gt; 

                &lt;Code Language="html"&gt; 

                        &lt;![CDATA[&lt;fieldset&gt; 

                                &lt;legend&gt;$legend$&lt;/legend&gt; 

                                &lt;div&gt; 

                                        $content$ 

                                &lt;/div&gt; 

                        &lt;/fieldset&gt;$end$]]&gt; 

                &lt;/Code&gt; 

        &lt;/Snippet&gt; 

&lt;/CodeSnippet&gt; 

                                &lt;/textarea&gt; 

                        &lt;/li&gt; 

                2、根據不同配置生成不同版本的 Web.config 檔案 

                        &lt;li&gt;在 Web.config 檔案點右鍵,選擇 “Add Config Transforms”,可生成不同配置的 Web.config 檔案(生成包的時候,按哪種配置生成則生成哪種配置的 Web.config 檔案)&lt;/li&gt; 

                        &lt;li&gt;預設有兩種配置,即 Debug 和 Release ,可以在 Build -&gt; Configuration Manager 中做 新增/删除/修改/更新 配置的操作&lt;/li&gt; 

                3、智能提示的改進。比如在對象後面“點”屬性的時候,它将根據已輸入的字母做篩選。例:如果在 TextBox 對象後鍵入 text, 則智能提示隻會顯示 Text, TextChanged, TextMode(以前會把對象的所有屬性、方法、事件都列出來) 

                4、将光标放到某一個辨別上的時候,則該頁所有使用了此辨別的地方都會被 IDE 突出顯示出來 

                5、新增了一個開發環境配置 - Code Optimized ,在此模式下隻有 html 編輯視圖,而沒有設計視圖。在第一次啟動 Visual Studio 2010 的時候,可以選擇開發環境配置。以後如果需要修改開發環境配置,可以在此處操作:Tools &gt; Import &amp; Export Settings &gt; Reset all settings option 

                6、在項目屬性中新增了兩個頁籤,Package/Publish Web 和 Package/Publish SQL,分别用于生成 Web 包和 SQL 包 

OK 

     本文轉自webabcd 51CTO部落格,原文連結:http://blog.51cto.com/webabcd/341172,如需轉載請自行聯系原作者

繼續閱讀