精进不休 .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" %> 

<!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> 
                <!-- 
                        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> 
                --> 
        </div> 
        </form> 
</body> 
</html> 
 
 
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> 
        <td> 
                <asp:DynamicControl ID= "DynamicControl1" runat= "server" DataField= "ProductID" /> 
        </td> 
</tr> 
<tr> 
        <td> 
                产品名称 
        </td> 
        <td> 
                <asp:DynamicControl ID= "DynamicControl2" runat= "server" DataField= "Name" /> 
        </td> 
</tr> 
 
DynamicData/EntityTemplates/Products.ascx.cs
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

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; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 

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 {  getset; } 

                [Display(Name =  "产品名称", Order = 1)] 
                 public object Name {  getset; } 

                [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" %> 

<!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> 
        <style> 
                body 
                { 
                        font-size: 12px; 
                } 
                textarea 
                { 
                        width: 99%; 
                } 
        </style> 
</head> 
<body> 
        <form id= "form1" runat= "server"
        <div> 
                <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> 
                <p> 
                        2、新增了一个 EnumDataTypeAttribute,可以声明某字段为枚举类型。对应的字段模板里也新增了 Enumeration.ascx 和 Enumeration_Edit.ascx 
                </p> 
                <p> 
                        3、新增了两个数据类型    
                        <ul> 
                                <li>[DataType(DataType.EmailAddress)] 对应的字段模板里也新增了 EmailAddress.ascx</li> 
                                <li>[DataType(DataType.Url)] 对应的字段模板里也新增了 Url.ascx</li> 
                        </ul> 
                </p> 
                <p> 
                        4、支持多对多的关系(限 Entity Framework 模型)。对应的字段模板里也新增了 ManyToMany.ascx 和 ManyToMany_Edit.ascx 
                </p> 
                <p> 
                        5、原 Dynamic Data 会自动地将类型为 Boolean, Enumeration, ForeignKey 的字段作为查询条件输出到页面上。现在新增了 Filter Template(查询模板),可以对这些查询条件的样式和逻辑等做自定义修改(详见 DynamicData/Filters 下的文件) 
                </p> 
        </div> 
        </form> 
</body> 
</html>
 
 
6、AJAX 增强
List.html
<!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> 
        <style> 
                body 
                { 
                        font-size: 12px; 
                } 
                textarea 
                { 
                        width: 99%; 
                } 
        </style> 
</head> 
<body> 
        <p> 
                1、Visual Studio 2010 内包含了 jQuery 
        </p> 
        <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> 
        </p> 
        <p> 
                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> 
        </p> 
</body> 
</html> 
 
 
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"
        <style> 
                body 
                { 
                        font-size: 12px; 
                } 
                textarea 
                { 
                        width: 99%; 
                } 
        </style> 
</asp:Content> 
<asp:Content ID= "Content2" ContentPlaceHolderID= "ContentPlaceHolder1" runat= "server"
        <p> 
                1、HTML 和 JavaScript 支持 Code Snippets(代码片段) 
                <ul> 
                        <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> 
                        <Literal> 
                                <ID>content</ID> 
                                <ToolTip>content</ToolTip> 
                                <Default>content</Default> 
                        </Literal> 
                </Declarations> 
                <Code Language= "html"
                        <![CDATA[<fieldset> 
                                <legend>$legend$</legend> 
                                <div> 
                                        $content$ 
                                </div> 
                        </fieldset>$ end$]]> 
                </Code> 
        </Snippet> 
</CodeSnippet> 
                                </textarea> 
                        </li> 
                </ul> 
        </p> 
        <p> 
                2、根据不同配置生成不同版本的 Web.config 文件 
                <ul> 
                        <li>在 Web.config 文件点右键,选择 “Add Config Transforms”,可生成不同配置的 Web.config 文件(生成包的时候,按哪种配置生成则生成哪种配置的 Web.config 文件)</li> 
                        <li>默认有两种配置,即 Debug 和 Release ,可以在 Build -> Configuration Manager 中做 新增/删除/修改/更新 配置的操作</li> 
                </ul> 
        </p> 
        <p> 
                3、智能提示的改进。比如在对象后面“点”属性的时候,它将根据已输入的字母做筛选。例:如果在 TextBox 对象后键入 text, 则智能提示只会显示 Text, TextChanged, TextMode(以前会把对象的所有属性、方法、事件都列出来) 
        </p> 
        <p> 
                4、将光标放到某一个标识上的时候,则该页所有使用了此标识的地方都会被 IDE 突出显示出来 
        </p> 
        <p> 
                5、新增了一个开发环境配置 - Code Optimized ,在此模式下只有 html 编辑视图,而没有设计视图。在第一次启动 Visual Studio 2010 的时候,可以选择开发环境配置。以后如果需要修改开发环境配置,可以在此处操作:Tools > Import & Export Settings > Reset all settings  option 
        </p> 
        <p> 
                6、在项目属性中新增了两个选项卡,Package/Publish Web 和 Package/Publish SQL,分别用于生成 Web 包和 SQL 包 
        </p> 
</asp:Content> 
 
 





     本文转自webabcd 51CTO博客,原文链接:http://blog.51cto.com/webabcd/341172 ,如需转载请自行联系原作者
相关文章
|
8月前
|
开发框架 .NET API
.NET 10首个预览版发布:重大改进与新特性概览!
.NET 10首个预览版发布:重大改进与新特性概览!
283 3
.NET 10首个预览版发布:重大改进与新特性概览!
|
人工智能 开发框架 .NET
.NET技术的强大功能:.NET技术的基础特性、在现代开发中的应用、以及它如何助力未来的软件开发。
.NET技术是软件开发领域的核心支柱,以其强大功能、灵活性及安全性广受认可。本文分三部分解析:基础特性如多语言支持、统一运行时环境;现代应用如企业级与Web开发、移动应用、云服务及游戏开发;以及未来趋势如性能优化、容器化、AI集成等,展望.NET在不断变化的技术环境中持续发展与创新。
458 4
|
7月前
|
网络协议 定位技术 网络安全
IPIP.NET-IP地理位置数据
IPIP.NET 是一家专注于 IP 地理位置数据的提供商,基于 BGP/ASN 数据与全球 800+ 网络监测点技术,提供高精度的 IPv4 和 IPv6 定位服务。其核心服务包括地理位置查询、详细地理信息和网络工具等,广泛应用于网络安全、广告营销、CDN 优化等领域。数据覆盖全球,支持多语言,每日更新确保实时性。IPIP.NET 提供 API 接口、离线数据库及多种语言 SDK,方便开发者集成使用。
1272 0
|
9月前
|
人工智能 机器人
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
D1net阅闻 | 谷歌DeepMind研究发现LLM新特性
|
自然语言处理 物联网 图形学
.NET 技术凭借其独特的优势和特性,为开发者们提供了一种高效、可靠且富有创造力的开发体验
本文深入探讨了.NET技术的独特优势及其在多个领域的应用,包括企业级应用、Web应用、桌面应用、移动应用和游戏开发。通过强大的工具集、高效的代码管理、跨平台支持及稳定的性能,.NET为开发者提供了高效、可靠的开发体验,并面对技术更新和竞争压力,不断创新发展。
581 7
|
开发框架 .NET C#
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位
.NET 技术凭借高效开发环境、强大框架支持及跨平台特性,在软件开发中占据重要地位。从企业应用到电子商务,再到移动开发,.NET 均展现出卓越性能,助力开发者提升效率与项目质量,推动行业持续发展。
312 4
|
JSON C# 开发者
C#语言新特性深度剖析:提升你的.NET开发效率
【10月更文挑战第15天】C#语言凭借其强大的功能和易用性深受开发者喜爱。随着.NET平台的演进,C#不断引入新特性,如C# 7.0的模式匹配和C# 8.0的异步流,显著提升了开发效率和代码可维护性。本文将深入探讨这些新特性,助力开发者在.NET开发中更高效地利用它们。
202 1
|
SQL XML 关系型数据库
入门指南:利用NHibernate简化.NET应用程序的数据访问
【10月更文挑战第13天】NHibernate是一个面向.NET的开源对象关系映射(ORM)工具,它提供了从数据库表到应用程序中的对象之间的映射。通过使用NHibernate,开发者可以专注于业务逻辑和领域模型的设计,而无需直接编写复杂的SQL语句来处理数据持久化问题。NHibernate支持多种数据库,并且具有高度的灵活性和可扩展性。
303 2
|
存储 编译器
.Net特性Attribute的高级使用
【10月更文挑战第14天】在.NET中,特性(Attribute)是一种强大的机制,用于在代码中添加元数据。本文介绍了特性的高级用法,包括自定义特性、通过反射读取特性、条件编译与特性结合、多个特性应用以及特性继承。通过示例展示了如何创建自定义特性类、应用自定义特性,并通过反射获取特性信息。此外,还介绍了如何利用条件编译符号实现不同版本的代码控制,以及如何在一个代码元素上应用多个特性。最后,探讨了如何通过`AttributeUsage`控制特性的继承行为。
273 1