将创建的LINQ-TO-SQL注册到MetaModel中,在UI层上的话根本使用的技术是ASP.NET

Tailspin Travel 是贰个旅游预约的应用程序示例,最新版本采纳ASP.NET MVC
贰技术构建,首要利用 DataAnnotations 验证,
客户端验证和ViewModels,还出示了重重Visual Studio 20拾, .NET Framework
四, 和Windows Server App法布里c的技能,参看ASP.NET MVC 2示例Tailspin
Travel

Asp.net dynamic Data web Site 之贰创设第三个Web Site

本专题介绍2个ASP.NET动态数据的网址的布局,个中包蕴那个文件私下认可情状下成立连锁文书夹和文件。

[索引页]
[源码下载]

Tailspin
Travel设计的技艺相比较多,今日我们来探望界面(UI)上的技术,在UI层上来说任重先生而道远采纳的技巧是ASP.NET
MVC二和ASP.NET
DynamicData框架。从效果上来分为向普通用户提供的前台页面和大班使用的后台界面,前台页面首要达成的是周游活动日程安插,航班,商旅,租车这几部分选用的ASP.NET
MVC 二技术,管理员用的后台管理页面使用的是ASP.NET
DynamicData开发的,那二种技术在网址里的运用有示范成效,对于管理员使用的后台的访问量不容许不小,网址的显要流量是普通用户使用的前台页面,组合使用那四个框架,能够加快网址的费用。

创设三个动态数据网址(Dynamic Data Web Site)

当仁不让VS 二零零六 sp一 + .NET 三.伍 sp壹(八) – Dynamic Data(动态数据)

构成那三种技术,就会遇到一些的标题,第二个难点正是ASP.NET
动态数据(Dynamic Data
)暗许意况下,动态数据放在web应用的动态数据目录(DynamicData)里,该目录创制在根目录处。你的利用要求活动的差别的任务。
在Tailspin
Travel里面是“admin”目录,动态数据就在这一个目录下,然后在Globa.asax.cs文件里

环境

vs.net 2008 + sp1

Dynamic Data Wizard 080608(http://www.codeplex.com/aspnet)

提供1个教导方式开创2个Dynamic Data Web Site

 

知识点:

LINQ-TO-SQL,Ado.net framework entity

System.Web.Routing

 

 

  1. 因此动态数据网址模板创造三个门类Dynamic Data Entities Web
    Site(数据源是ado.net entity framework 提供) ,Dynamic Data Web
    Site(数据源是LINQ-To-SQL提供)

图片 1

图表 1

 

  1. 使用动态数据创立的网址布局,正是这一个模板生成用户控件包含网页模板,字段模板,内容(css,图片,js等)。

图片 2

图表 2

图片 3

图表 3

作者:webabcd

var metaModel = new MetaModel();
metaModel.RegisterContext(contextFactory, new ContextConfiguration {
ScaffoldAllTables = true });
metaModel.DynamicDataFolderVirtualPath = “~/Admin/DynamicData/”;

文件夹和文件

下表介绍了在ASP.NET动态数据网站在根目录级创设的公文和文书夹。

 

文件和文件夹

描述

DynamicData

包含显示和操作数据的页面和自定义控件,页面,和子控件如字段控件

Default.aspx

一个默认首页面显示所有注册的数据模型及表名。通过一个超链接,显示选择表的内容。

Global.asax

包含一个 注册数据库实例元模型的方法,并新增一个RouteCollection对象

Site.css

站点和控件的显示风格

Site.master

站点模板

web.config

配置文件,加载必要的类库

 

Web.Config

图片 4

图表 4

 

  1. 加上二个元数据库实例模型(LINQ-TO-SQL)

    图片 5

图表 5

  1. 登记那些元数据模型,打开Global.asax

public static void
RegisterRoutes(RouteCollection
routes) {

MetaModel model = new MetaModel();

//model.RegisterContext(typeof(YourDataContextType),
new ContextConfiguration() { ScaffoldAllTables = false });

routes.Add(new DynamicDataRoute(“{table}/{action}.aspx”) {

Constraints = new RouteValueDictionary(new { action = “List|Details|Edit|Insert” }),

Model = model

});

//routes.Add(new
DynamicDataRoute(“{table}/ListDetails.aspx”) {

// Action = PageAction.List,

// ViewName = “ListDetails”,

// Model = model

//});

//routes.Add(new
DynamicDataRoute(“{table}/ListDetails.aspx”) {

// Action = PageAction.Details,

// ViewName = “ListDetails”,

// Model = model

//});

}

 

将创造的LINQ-TO-SQL注册到MetaModel中

model.RegisterContext(typeof(NorhwindDbDataContext), new ContextConfiguration() { ScaffoldAllTables
= true });

 

  1. 测试一下,编写翻译后F伍,三个网址成立完结

    图片 6

图表 6

首页的代码片断,突显全部注册的表

protected void Page_Load(object sender, EventArgs e)

{

System.Collections.IList visibleTables = MetaModel.Default.VisibleTables;

if (visibleTables.Count == 0)

{

throw new
InvalidOperationException(“There are no accessible tables. Make sure that
at least one data model is registered in Global.asax and scaffolding is
enabled or implement custom pages.”);

}

Menu1.DataSource =
visibleTables;

Menu1.DataBind();

}

图片 7

图表 7

梯次页面中的超链接通过RouteCollection(System.Web.Routing)的路由规则实行页面间的跳转和对数码新增/修改/删除操作;关于System.Web.Routing在asp.net mvc中有比较详细的介绍

 

routes.Add(new DynamicDataRoute(“{table}/{action}.aspx”) {

Constraints = new RouteValueDictionary(new { action = “List|Details|Edit|Insert” }),

Model = model

});

 

 

 

下期讲什么样通过Routing的规则控制表的修改,新增操作页面;

介绍
以Northwind为示范数据库,演示Dynamic Data(动态数据)

转移admin/Dynamicdata
下文件的内容的引用到新的门道((~/admin/Dynamicdata)
例如:
A、修改List.aspx和ListDetails.aspx 的登记指令的src属性。
B、修改 List.aspx 和母版页的img 的src属性。
C、任何自定义的必须选取新路线的内容。

  • MetaModel – 数据库和域对象之间的炫耀的抽象
  • MetaModel.RegisterContext() –
    使用钦点的陈设上下文注册内定的数目上下文
  • Scaffold – 译为基架。即基于数据库架构(linq to sql 或 entity
    framework)生成网页模板的编写制定
  • ScaffoldTableAttribute(false) – 隐藏钦定的表
  • ScaffoldColumn(false) – 隐藏钦点的字段
  • MetadataTypeAttribute(Type metadataClassType) –
    钦定要与数据模型类关联的元数据类
  • DynamicField – 展现钦点的动态数据字段,也正是 BoundField
  • DynamicControl – 通过点名的字段模板呈现钦定的动态数据字段

ASP.NET
四.0有个新特色叫做“自动运转应用程序”,自动运营,先行伊始化web应用,而毋庸等待外部客户端访问web服务器时才运转的能力。那能够促进你给第三个访问者提供一个更快的东山再起体验,幸免撰写定制脚本来“预热(warm
up)”服务器和准备好任何数据缓存。它可用于其余类型的ASP.NET应用,包蕴基于ASP.NET
Web Forms和ASP.NET MVC的接纳。但是要求在IIS 柒.5(随Windows 7和Windows
Server 2010 Odyssey2通告)上运转 ASP.NET
4时选拔。那么些活动运转个性提供了三个可决定的艺术来运转四个利用工作历程,初步化ASP.NET
应用,然后接受HTTP请求。具体参看Scott
Guthrie
的文章 VS 20拾 和 .NET 四.0
连串之《自动运营ASP.NET应用》篇
,Tailspin
Travel有个类Microsoft.萨姆ples.Tailspin.Web.Infrastructure.ApplicationPreloader,正是用这几个本性预先加载应用程序的缓存。

示例
大局配置
Global.asax

上面我们来具体分析前台和管制后台:

图片 8<%@ Application Language=”C#” %>
图片 9<%@ Import Namespace=”System.Web.Routing” %>
图片 10<%@ Import Namespace=”System.Web.DynamicData” %>
图片 11
图片 12<script runat=”server”>
图片 13    
图片 14    public static void RegisterRoutes(RouteCollection routes)
图片 15图片 16    图片 17{
图片 18        MetaModel model = new MetaModel();
图片 19
图片 20        // MetaModel – 数据库和域对象时期的映射的空洞
图片 21        // MetaModel.RegisterContext(Type contextType, ContextConfiguration configuration) – 使用内定的安排上下文注册钦赐的数额上下文
图片 22        //     contextType – 数据模型中所定义的数据上下文类型
图片 23        //     configuration – 相关的布局。其 ScaffoldAllTables 属性为是或不是要启用基架,基架正是基于数据库架构(linq to sql 或 entity framework)生成网页模板的建制
图片 24图片 25        model.RegisterContext(typeof(VS2008SP1.Business.NorthwindEntities), new ContextConfiguration() 图片 26{ ScaffoldAllTables = true });
图片 27
图片 28        // 上边包车型地铁说话帮助分页形式,在那种形式下,“列表”、“详细”、“插入”
图片 29        // 和“更新”职责是选取不一致页执行的。若要启用此形式,请撤销注释上面
图片 30        // 的 route 定义,并注释掉后边的联合页形式部分中的 route 定义。
图片 31        routes.Add(new DynamicDataRoute(“{table}/{action}.aspx”)
图片 32图片 33        图片 34{
图片 35图片 36            Constraints = new RouteValueDictionary(new 图片 37{ action = “List|Details|Edit|Insert” }),
图片 38            Model = model
图片 39        });
图片 40
图片 41        // 上边包车型大巴言语帮忙合并页方式,在那种格局下,“列表”、“详细”、“插入”
图片 42        // 和“更新”职责是行使相同页执行的。若要启用此形式,请裁撤注释上面
图片 43        // 的 routes,并注释掉上边的分页方式部分中的 route 定义。
图片 44        // routes.Add(new DynamicDataRoute(“{table}/ListDetails.aspx”) {
图片 45        //     Action = PageAction.List,
图片 46        //     ViewName = “ListDetails”,
图片 47        //     Model = model
图片 48        // });
图片 49
图片 50        // routes.Add(new DynamicDataRoute(“{table}/ListDetails.aspx”) {
图片 51        //     Action = PageAction.Details,
图片 52        //     ViewName = “ListDetails”,
图片 53        //     Model = model
图片 54        // });
图片 55    }
图片 56
图片 57    void Application_Start(object sender, EventArgs e)
图片 58图片 59    图片 60{
图片 61        RegisterRoutes(RouteTable.Routes);
图片 62    }
图片 63
图片 64</script>
图片 65
图片 66

前台选取ASP.NET MVC
贰开发,相比不难,首要是使用ViewModels,HtmlHelper,输出缓存,幸免CS昂科雷F攻击,查询艺术中运用PartialView,以及jQuery和ASP.NET
Ajax同盟的有关内容,能够参考 Asp.net MVC2使用经验,品质优化建议学习。

一、数据驱动的 Web 应用程序
详见源代码中的DynamicDataSite项目。动态数据的目录结构详见MSDN
Scaffold.cs

上面重点来证圣元(Synutra)下管理后台的DynamicData的构造,先可以翻阅一下Scott
Guthrie
的文章
新的ASP.NET动态数据援助

图片 67using System;
图片 68using System.Collections.Generic;
图片 69using System.Linq;
图片 70using System.Text;
图片 71
图片 72using System.ComponentModel.DataAnnotations;
图片 73using System.ComponentModel;
图片 74
图片 75namespace VS2008SP1.Business
图片 76图片 77图片 78{
图片 79图片 80    /**//*
图片 81     * Scaffold – 译为基架。即依照数据库架构(linq to sql 或 entity framework)生成网页模板的机制
图片 82     * ScaffoldTableAttribute(false) – 隐藏钦赐的表
图片 83     * ScaffoldColumn(false) – 隐藏钦定的字段
图片 84     * MetadataTypeAttribute(Type metadataClassType) – 钦点要与数据模型类关联的元数据类
图片 85     */
图片 86
图片 87    [ScaffoldTable(false)]
图片 88    public partial class Region
图片 89图片 90    图片 91{
图片 92        // Region 表不会被路由(展现)
图片 93    }
图片 94
图片 95    [MetadataType(typeof(Customers_Metadata))]
图片 96    public partial class Customers
图片 97图片 98    图片 99{
图片 100        // 将 Customers 的元数据涉嫌到 Customers_Metadata
图片 101    }
图片 102
图片 103    public class Customers_Metadata
图片 104图片 105    图片 106{
图片 107        [ScaffoldColumn(false)]
图片 108        public object Phone;
图片 109
图片 110        // Phone 不会在 Customers 表中被突显
图片 111    }
图片 112}
图片 113

ASP.NET
动态数据在展开创办和翻新数据时还会对所录入的多少举办求证,那种验证既爆发在客户端也时有产生在劳务器端。

Validation.cs

  • 必填字段验证。借使字段不容许为
    NULL,则录入时务必录入数据。不过那里还有待革新,不允许为
    NULL,也就成了不允许零长度字符串,而实质上运用中 NULL
    和零长度字符串是一遍事。即便不够健全,也已经为大家减轻不少工作量了。
  • 长度验证。假若字段类型为 nvarchar(十),那么就不允许超过 13个字符;假设字段类型不是 nvarchar(10),而是
    varchar(十),此时七个汉字也会透过验证,只是非常小概入库罢了,会回到错误。
  • 体系验证。比如字段是日期类型,则只同意录入日期。

图片 114using System;
图片 115using System.Collections.Generic;
图片 116using System.Linq;
图片 117using System.Text;
图片 118
图片 119using System.ComponentModel.DataAnnotations;
图片 120using System.ComponentModel;
图片 121
图片 122namespace VS2008SP1.Business
图片 123图片 124图片 125{
图片 126    [MetadataType(typeof(Products_Metadata))]
图片 127    public partial class Products
图片 128图片 129    图片 130{
图片 131        // entity framework 会自动生成类似 OnFieldChanging() 的一对方法
图片 132        // 要是想做字段的自定义输入验证,则足以重写此办法
图片 133        partial void OnUnitPriceChanging(global::System.Nullable<decimal> value)
图片 134图片 135        图片 136{
图片 137            if (value > 1000)
图片 138图片 139            图片 140{
图片 141                throw new ValidationException(“Unit普赖斯 不能够压倒 1000”);
图片 142            }
图片 143        }
图片 144    }
图片 145
图片 146    public class Products_Metadata
图片 147图片 148    图片 149{
图片 150        // [DataType(DataType.EmailAddress)] // 钦赐要与数码字段关联的叠加类型的名号
图片 151        // [DisplayFormat()] // 格式化输出
图片 152        // [Range()] // 钦赐字段的限制约束
图片 153        // [RegularExpression()] // 正则表明式验证
图片 154        // [StringLength()] // 字段的字符长度验证
图片 155        [Required()] // 必填
图片 156        [UIHint(“MyDecimal”)] // 使用名称叫 MyDecimal 的字段模板
图片 157        public object UnitPrice;
图片 158
图片 159        [DisplayName(“产品名称”)] // 钦定的字段所展现的称号。在动态数据中,查看 Products 表,其 header 将显得为 产品名称
图片 160        [StartsWith(“webabcd”, ErrorMessage = “{0} 必须以 {1} 开头”)] // 应用自定义 ValidationAttribute
图片 161图片 162        public object ProductName 图片 163{ get; set; }
图片 164
图片 165    }
图片 166
图片 167
图片 168    // 编写1个自定义 ValidationAttribute,验证钦点字段是还是不是是以钦命的字符串起头
图片 169    [AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
图片 170    sealed public class StartsWithAttribute : ValidationAttribute
图片 171图片 172    图片 173{
图片 174        readonly string _param;
图片 175
图片 176图片 177        /**//// <summary>
图片 178        /// 构造函数
图片 179        /// </summary>
图片 180        /// <param name=”param”>钦点的上马字符串</param>
图片 181        public StartsWithAttribute(string param)
图片 182图片 183        图片 184{
图片 185            _param = param;
图片 186        }
图片 187
图片 188图片 189        /**//// <summary>
图片 190        /// 是或不是经过认证
图片 191        /// </summary>
图片 192        /// <param name=”value”>输入值</param>
图片 193        /// <returns></returns>
图片 194        public override bool IsValid(object value)
图片 195图片 196        图片 197{
图片 198            return ((string)value).ToLower().StartsWith(this._param.ToLower());
图片 199        }
图片 200
图片 201图片 202        /**//// <summary>
图片 203        /// 格式化错误消息
图片 204        /// </summary>
图片 205        /// <param name=”name”>内定的字段名</param>
图片 206        /// <returns></returns>
图片 207        public override string FormatErrorMessage(string name)
图片 208图片 209        图片 210{
图片 211            return string.Format(ErrorMessageString, name, this._param);
图片 212        }
图片 213    }
图片 214}
图片 215

ASP.NET 动态数据具有自动格式功效:比如 bit
类型的字段展现为三个多选框,而标识字段不会在插入数据时显示出来。

贰、以 Products 表为例,演示动态数据的采纳
MyProducts.aspx

ASP.NET
动态数据还兼具自动识别表关联的职能:比如产品表与产品种类表举行了事关,那么大家在录入产品数据的时候,ASP.NET
动态数据会自动以下拉列表的款式显示产品连串。此意义13分不易。

图片 216图片 217<%图片 218@ Page Language=”C#” MasterPageFile=”~/Site.master” CodeFile=”MyProducts.aspx.cs”
图片 219    Inherits=”MyProducts” Title=”以 Products 表为例,演示动态数据的采纳” %>
图片 220
图片 221图片 222<%图片 223@ Register Assembly=”System.Web.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089″
图片 224    Namespace=”System.Web.UI.WebControls” TagPrefix=”asp” %>
图片 225<asp:Content ID=”Content1″ ContentPlaceHolderID=”ContentPlaceHolder1″ runat=”Server”>
图片 226    <asp:DynamicDataManager ID=”DynamicDataManager1″ runat=”server” AutoLoadForeignKeys=”true” />
图片 227    <h2>
图片 228        以 Products 表为例,演示动态数据的行使</h二>
图片 229    <asp:FormView ID=”FormView1″ runat=”server” DataSourceID=”FormDataSource” AllowPaging=”True”
图片 230        DataKeyNames=”ProductId”>
图片 231        <ItemTemplate>
图片 232            <table>
图片 233                <tr>
图片 234                    <td>
图片 235                        ProductId:
图片 236                    </td>
图片 237                    <td>
图片 238                        <!–DynamicField – 展现钦赐的动态数据字段,也等于 BoundField–>
图片 239                        <!–DynamicControl – 通过点名的字段模板突显钦命的动态数据字段–>
图片 240                        <asp:DynamicControl ID=”ProductId” runat=”server” DataField=”ProductId” />
图片 241                    </td>
图片 242                </tr>
图片 243                <tr>
图片 244                    <td>
图片 245                        ProductName:
图片 246                    </td>
图片 247                    <td>
图片 248                        <asp:DynamicControl ID=”ProductName” runat=”server” DataField=”ProductName” />
图片 249                    </td>
图片 250                </tr>
图片 251                <tr>
图片 252                    <td>
图片 253                        UnitPrice:
图片 254                    </td>
图片 255                    <td>
图片 256                        <asp:DynamicControl ID=”UnitPrice” runat=”server” DataField=”UnitPrice” />
图片 257                    </td>
图片 258                </tr>
图片 259                <tr>
图片 260                    <td colspan=”2″>
图片 261                        <asp:LinkButton ID=”InsertButton” runat=”server” CommandName=”New” CausesValidation=”false”
图片 262                            Text=”New” />
图片 263                        <asp:LinkButton ID=”EditButton” runat=”server” CommandName=”Edit” CausesValidation=”false”
图片 264                            Text=”Edit” />
图片 265                        <asp:LinkButton ID=”DeleteButton” runat=”server” CommandName=”Delete” CausesValidation=”false”
图片 266                            Text=”Delete” />
图片 267                    </td>
图片 268                </tr>
图片 269            </table>
图片 270        </ItemTemplate>
图片 271        <EditItemTemplate>
图片 272            <table>
图片 273                <tr>
图片 274                    <td>
图片 275                        ProductId:
图片 276                    </td>
图片 277                    <td>
图片 278                        <asp:DynamicControl ID=”ProductId” runat=”server” DataField=”ProductId” Mode=”ReadOnly” />
图片 279                    </td>
图片 280                </tr>
图片 281                <tr>
图片 282                    <td>
图片 283                        ProductName:
图片 284                    </td>
图片 285                    <td>
图片 286                        <!–
图片 287                            UIHint – 钦命字段模板,此例的字段模板会以古金色背景展现数据
图片 288                            Mode – 设置显示形式 [System.Web.UI.WebControls.DataBoundControlMode 枚举] 
图片 289                                DataBoundControlMode.ReadOnly – 只读方式。暗许值
图片 290                                DataBoundControlMode.艾德it – 编辑方式
图片 291                                DataBoundControlMode.Insert – 插入格局
图片 292                        –>
图片 293                        <asp:DynamicControl ID=”ProductName” runat=”server” DataField=”ProductName” Mode=”Edit”
图片 294                            UIHint=”YelloText” />
图片 295                    </td>
图片 296                </tr>
图片 297                <tr>
图片 298                    <td>
图片 299                        UnitPrice:
图片 300                    </td>
图片 301                    <td>
图片 302                        <asp:DynamicControl ID=”UnitPrice” runat=”server” DataField=”UnitPrice” Mode=”Edit” />
图片 303                    </td>
图片 304                </tr>
图片 305                <tr>
图片 306                    <td colspan=”2″>
图片 307                        <asp:LinkButton ID=”UpdateButton” runat=”server” CommandName=”Update”>Update</asp:LinkButton>
图片 308                        <asp:LinkButton ID=”CancelEditButton” runat=”server” CommandName=”Cancel” CausesValidation=”false”>Cancel</asp:LinkButton>
图片 309                    </td>
图片 310                </tr>
图片 311            </table>
图片 312        </EditItemTemplate>
图片 313        <InsertItemTemplate>
图片 314            <table>
图片 315                <tr>
图片 316                    <td>
图片 317                        ProductName:
图片 318                    </td>
图片 319                    <td>
图片 320                        <asp:DynamicControl ID=”ProductName” runat=”server” DataField=”ProductName” Mode=”Insert” />
图片 321                    </td>
图片 322                </tr>
图片 323                <tr>
图片 324                    <td colspan=”2″>
图片 325                        <asp:LinkButton ID=”InsertButton” runat=”server” CommandName=”Insert” Text=”Insert” />
图片 326                        <asp:LinkButton ID=”CancelInsertButton” runat=”server” CommandName=”Cancel” CausesValidation=”false”
图片 327                            Text=”Cancel” />
图片 328                    </td>
图片 329                </tr>
图片 330            </table>
图片 331        </InsertItemTemplate>
图片 332        <PagerSettings Position=”Bottom” Mode=”NumericFirstLast” />
图片 333    </asp:FormView>
图片 334    <asp:EntityDataSource ID=”FormDataSource” runat=”server” ConnectionString=”name=NorthwindEntities”
图片 335        DefaultContainerName=”NorthwindEntities” EntitySetName=”Products” ContextTypeName=”VS2008SP1.Business.NorthwindEntities”
图片 336        EnableInsert=”True” EnableUpdate=”True” EnableDelete=”True”>
图片 337    </asp:EntityDataSource>
图片 338</asp:Content>
图片 339

在网址也许应用程序模板中有三个Dynamic Data模板,一个是 “Dynamic
Data实人体模型板(Dynamic Data Entities )”它是使用ADO.net
Entity作为数据模型的,另一个是 “Dynamic Data 模板”,他是应用LINQ TO SQL
来作为数据模型。Tailspin Travel 是以Entity Framework作为数据模型的。

OK
[源码下载]

Dynamic Data也利用了Routing:

            routes.Add(new DynamicDataRoute(“Admin/{table}/{action}”)
            {
                Constraints = new RouteValueDictionary(new { action =
“List|Edit|Details|Insert” }),
                Model = metaModel
            });

routes.Add 的参数为一个 DynamicDataRoute 对象,而该 DynamicDataRoute
对象有二个参数为
“Admin/{table}/{action}.aspx”,其余还为该目的内定了八个属性值
Constraints 和
Model。把1个两次三番自Route的DynamicDataRoute添加到Routing规则表中。

Constraints = new RouteValueDictionary(new { action =
“List|Details|艾德it|Insert” }) 那句表示约束,那里代表 action 只可以是
List、Details、艾德it、Insert 中的一个。

能够看来,那七个Aciton是对应着DynamicData/PageTemplates文件夹中的多个页面文件。在那文件夹中还有三个ListDetails.aspx页面文件,是用于”合并页情势”,就是怀有的操作都会在一页中实现。Tailspin
Travel并从未启用这么些职能。DynamicData 文件夹的称号都以“DynamicData”。

地点的 {table}、{action} 可不得以改成大家友好想要的名字啊?

丰盛的,大家能够看看,下面使用的是 DynamicDataRoute 类,而不是 Route
类,DynamicDataRoute 继承于 Route,Table 和 Action 属性是
DynamicDataRoute 特有的。

DynamicData/Content/GridViewPager.ascx 分页控件。

DynamicData/Content/FilterUserControl.ascx
在展现表中的数据时,该控件展现在表头,用以过滤表中的内容,比如能够只列表产品目录为“实用工具”的成品。

DynamicData/CustomPages 文件夹。自定义网页模板文件夹,可用以替换
DynamicData/PageTemplates 文件夹中的默许模板。

DynamicData/FieldTemplates
文件夹。包含各连串型的字段在查阅和创办、编辑时所显示的控件。

DynamicData/PageTemplates 文件夹。包罗在展开查看、编辑时的页面模板。

Dynamic
Data还有二个快速支付的基本功是脚手架,脚手架是一种体制,通过脚手架,大家不用再为每二个表的增添、查看、修改做差别的页面,因为脚手架会自动生成这个页面。Tailspin
Travel对全数表都启用脚手架,对具有表启用脚手架表示公开了上上下下数据模型:

metaModel.RegisterContext(contextFactory, new ContextConfiguration {
ScaffoldAllTables = true });

还是能够对特定表启用脚手架功用,那时就要将上边包车型客车ScaffoldAllTables =
false,然后给模型类打标签[System.ComponentModel.DataAnnotations.ScaffoldTable(true)]

 

自动生成的网址供给大家调整的页面,须要创造自定义的页面能够把它置身DynamicData/CustomPages
文件夹,在 DynamicData/CustomPages/ 下新建三个文书夹,名叫FlightBookings,这些称号一定要与
Tailspin.edmx中的相应表的分部类名称相同。然后将
DynamicData/PageTemplates/ 下的文件复制到
DynamicData/CustomPages/FlightBookings/。

转移新模板文件中的类名。

例如将类名称 List 改为 DynamicDataTest.FlightBookingsList。

行使DisplayName更改界面包车型大巴展现,DisplayName
只可以用于类、方法、属性、索引、事件

[MetadataType(typeof(CarRentalMetadata))]
    public partial class CarRental
    {
        [ScaffoldTable(false)]
        private class CarRentalMetadata
        {
            [DisplayName(“Pick up”)]
            public object RentalStart { get; set; }

            [DisplayName(“Return”)]
            public object RentalEnd { get; set; }

            [DisplayName(“Pick up Place”)]
            [Required(ErrorMessage = “Please specify where you prefer
to pickup the vehicle.”)]
            public object PickupPlaceId { get; set; }

            [DisplayName(“Return place”)]
            [Required(ErrorMessage = “Please specify where you prefer
to return the vehicle.”)]
            public object ReturnPlaceId { get; set; }

            [DisplayName(“Vehicle”)]
            [Required(ErrorMessage = “Please specify the vehicle
type.”)]
            public object VehicleTypeId { get; set; }
        }
    }

还是能用 UIHint,DataType 改变字段模板

[MetadataType(typeof(FlightMetadata))]
    public partial class Flight
    {
        public Flight()
        {
            this.Id = Guid.NewGuid();
        }

        [DisplayName(“Flights”)]
        private class FlightMetadata
        {
            [ScaffoldColumn(false)]
            public object Id { get; set; }

            [Required]
            public object AirplaneType { get; set; }

            [UIHint(“Time”)]
            public object DepartureTime { get; set; }

            [UIHint(“Time”)]
            [DataType(DataType.Time)]
            public object ArrivalTime { get; set; }

            [DisplayName(“Departure Airport”)]
            public object DepartureAirport { get; set; }

            [DisplayName(“Arrival Airport”)]
            public object ArrivalAirport { get; set; }
        }
    }

DynamicData至极的灵活,Tailspin
Travel用来应付管理后台的费用方面有着相当高的频率,在前台使用MVC2保险品质,在UI界面包车型大巴支出方面丰裕值得借鉴的1种情势。

相关文章