天天看點

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

[索引頁]

[×××]

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

作者:webabcd

介紹

asp.net 4.0 的新增功能

動态資料(Dynamic Data)增強(之前的版本:http://webabcd.blog.51cto.com/1787395/341156)

  • EnableDynamicData - 啟用 Dynamic Data 的功能 
  • DynamicHyperLink - 用于友善地生成在 Dynamic Data 站點中導航的超級連結 
  • Entity Template - 實體模闆是一個新增的用于自定義資料顯示的模闆,其基于 FormView 控件做資料呈現 
  • DisplayAttribute - 新增的一個 Attribute(可以設定字段的Name和Order) 
  • 其它新特性

AJAX 增強

Visual Studio 2010 增強

示例

1、Dynamic Data 之 EnableDynamicData

Demo/EnableDynamicData.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="EnableDynamicData.aspx.cs"

        Inherits="DynamicData.Demo.EnableDynamicData" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head runat="server">

        <title></title>

</head>

<body>

        <form id="form1" runat="server">

        <div>

                <!--收集并顯示由 Dynamic Data 所做的資料驗證的結果-->

                <asp:ValidationSummary ID="ValidationSummary1" runat="server" EnableClientScript="true" HeaderText="驗證錯誤的清單" />

                <asp:DetailsView ID="DetailsView1" runat="server" AllowPaging="True" DataKeyNames="ProductID"

                        DataSourceID="EntityDataSource1">

                        <Fields>

                                <asp:CommandField ShowDeleteButton="True" ShowEditButton="True" ShowInsertButton="True" />

                        </Fields>

                </asp:DetailsView>

                <asp:EntityDataSource ID="EntityDataSource1" runat="server" ConnectionString="name=AdventureWorksEntities"

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

                        EnableUpdate="True" EntitySetName="Products" EnableFlattening="False">

                </asp:EntityDataSource>

        </div>

        </form>

</body>

</html>

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

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="DynamicHyperLinkDemo.aspx.cs"

        Inherits="DynamicData.Demo.DynamicHyperLinkDemo" %>

                <!--

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

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

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

                                ContextTypeName - 上下文的類全名

                -->

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

                        TableName="Products" ContextTypeName="DynamicData.AdventureWorksEntities">    

                </asp:DynamicHyperLink>

                        生成的 HTML 代碼如下:

                        <a id="ListHyperLink" href="/Products/List.aspx">全部産品</a>

3、Dynamic Data 之 Entity Template

DynamicData/EntityTemplates/Products.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Products.ascx.cs" Inherits="DynamicData.DynamicData.EntityTemplates.Products" %>

<!--

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

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

        以下内容會被替換到 PageTemplates/Details.aspx <asp:DynamicEntity runat="server" /> 中去

-->

<tr>

        <td>

                産品ID

        </td>

                <asp:DynamicControl ID="DynamicControl1" runat="server" DataField="ProductID" />

</tr>

                産品名稱

                <asp:DynamicControl ID="DynamicControl2" runat="server" DataField="Name" />

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

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Others.aspx.cs" Inherits="DynamicData.Demo.Others" %>

        <style>

                body

                        font-size: 12px;

                textarea

                        width: 99%;

        </style>

                <p>

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

                        <textarea>

                                <asp:DynamicDataManager ID="DynamicDataManager1" runat="server" AutoLoadForeignKeys="true">    

                                        <DataControls>    

                                                <asp:DataControlReference ControlID="GridView1" />    

                                        </DataControls>

                                </asp:DynamicDataManager>    

                                <asp:GridView id="GridView1" runat="server" />

                        </textarea>

                </p>

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

                        3、新增了兩個資料類型    

                        <ul>

                                <li>[DataType(DataType.EmailAddress)] 對應的字段模闆裡也新增了 EmailAddress.ascx</li>

                                <li>[DataType(DataType.Url)] 對應的字段模闆裡也新增了 Url.ascx</li>

                        </ul>

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

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

</html>

6、AJAX 增強

List.html

        <p>

                1、Visual Studio 2010 内包含了 jQuery

        </p>

                2、JavaScript 架構的 CDN

                <ul>

                        <li>jQuery - <script src="http://ajax.Microsoft.com/ajax/jquery-1.3.2.js" type="text/javascript"></script></li>

                        <li>asp.net ajax - <asp:ScriptManager ID=”ScriptManager1” EnableCdn=”true” runat=”server” /></li>

                </ul>

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

                <textarea rows="10">

<asp:ScriptManager ID="ScriptManager1" AjaxFrameworkMode="Explicit" runat="server">

        <Scripts>

                <asp:ScriptReference Name="MicrosoftAjaxCore.js" />

                <asp:ScriptReference Name="MicrosoftAjaxComponentModel.js" />

                <asp:ScriptReference Name="MicrosoftAjaxSerialization.js" />

                <asp:ScriptReference Name="MicrosoftAjaxNetwork.js" />        

        </Scripts>

</asp:ScriptManager>

                </textarea>

7、Visual Studio 2010 增強

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

        CodeBehind="List.aspx.cs" Inherits="VisualStudio.List" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">

</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">

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

                        <li>組合鍵 ctrl+k ctrl+x 用于插入代碼片段</li>

                        <li>組合鍵 ctrl+k ctrl+b 用于調出代碼片段管理器</li>

                        <li>

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

                                <textarea rows="6">

<CodeSnippet Format="1.1.0" xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

        <Header>

                <Title>fieldset</Title>

                <Author>webabcd</Author>

                <Shortcut>fieldset</Shortcut>

                <Description>Markup snippet for a fieldset</Description>

                <SnippetTypes>

                        <SnippetType>Expansion</SnippetType>

                        <SnippetType>SurroundsWith</SnippetType>

                </SnippetTypes>

        </Header>

        <Snippet>

                <Declarations>

                        <Literal>

                                <ID>legend</ID>

                                <ToolTip>legend</ToolTip>

                                <Default>标題</Default>

                        </Literal>

                                <ID>content</ID>

                                <ToolTip>content</ToolTip>

                                <Default>content</Default>

                </Declarations>

                <Code Language="html">

                        <![CDATA[<fieldset>

                                <legend>$legend$</legend>

                                <div>

                                        $content$

                                </div>

                        </fieldset>$end$]]>

                </Code>

        </Snippet>

</CodeSnippet>

                                </textarea>

                        </li>

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

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

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

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

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

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

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

OK

繼續閱讀