[索引頁]
[×××]
精進不休 .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