VS 2008 sp1 + .NET 3.5 sp1(8) - Dynamic Data(動態資料)
介紹
以Northwind為示例資料庫,演示Dynamic Data(動態資料)
MetaModel - 資料庫和域物件之間的對映的抽象
MetaModel.RegisterContext() - 使用指定的配置上下文註冊指定的資料上下文
Scaffold - 譯為基架。即基於資料庫架構(linq to sql 或 entity framework)生成網頁模板的機制
ScaffoldTableAttribute(false) - 隱藏指定的表
ScaffoldColumn(false) - 隱藏指定的欄位
MetadataTypeAttribute(Type metadataClassType) - 指定要與資料模型類關聯的後設資料類
DynamicField - 顯示指定的動態資料欄位,相當於 BoundField
DynamicControl - 通過指定的欄位模板顯示指定的動態資料欄位
示例
全域性配置
Global.asax
public static void RegisterRoutes(RouteCollection routes)
{
MetaModel model = new MetaModel();
// MetaModel - 資料庫和域物件之間的對映的抽象
// MetaModel.RegisterContext(Type contextType, ContextConfiguration configuration) - 使用指定的配置上下文註冊指定的資料上下文
// contextType - 資料模型中所定義的資料上下文型別
// configuration - 相關的配置。其 ScaffoldAllTables 屬性為是否要啟用基架,基架就是基於資料庫架構(linq to sql 或 entity framework)生成網頁模板的機制
model.RegisterContext(typeof(VS2008SP1.Business.NorthwindEntities), new ContextConfiguration() { ScaffoldAllTables = true });
// 下面的語句支援分頁模式,在這種模式下,“列表”、“詳細”、“插入”
// 和“更新”任務是使用不同頁執行的。若要啟用此模式,請取消註釋下面
// 的 route 定義,並註釋掉後面的合併頁模式部分中的 route 定義。
routes.Add(new DynamicDataRoute("{table}/{action}.aspx")
{
Constraints = new RouteValueDictionary(new { action = "List|Details|Edit|Insert" }),
Model = model
});
// 下面的語句支援合併頁模式,在這種模式下,“列表”、“詳細”、“插入”
// 和“更新”任務是使用同一頁執行的。若要啟用此模式,請取消註釋下面
// 的 routes,並註釋掉上面的分頁模式部分中的 route 定義。
// 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
// });
}
void Application_Start(object sender, EventArgs e)
{
RegisterRoutes(RouteTable.Routes);
}
1、資料驅動的 Web 應用程式
詳見原始碼中的DynamicDataSite專案。動態資料的目錄結構詳見MSDN
Scaffold.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
namespace VS2008SP1.Business
{
/**//*
* Scaffold - 譯為基架。即基於資料庫架構(linq to sql 或 entity framework)生成網頁模板的機制
* ScaffoldTableAttribute(false) - 隱藏指定的表
* ScaffoldColumn(false) - 隱藏指定的欄位
* MetadataTypeAttribute(Type metadataClassType) - 指定要與資料模型類關聯的後設資料類
*/
[ScaffoldTable(false)]
public partial class Region
{
// Region 表不會被路由(顯示)
}
[MetadataType(typeof(Customers_Metadata))]
public partial class Customers
{
// 將 Customers 的後設資料關聯到 Customers_Metadata
}
public class Customers_Metadata
{
[ScaffoldColumn(false)]
public object Phone;
// Phone 不會在 Customers 表中被顯示
}
}
Validation.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
namespace VS2008SP1.Business
{
[MetadataType(typeof(Products_Metadata))]
public partial class Products
{
// entity framework 會自動生成類似 OnFieldChanging() 的部分方法
// 如果想做欄位的自定義輸入驗證,則可以重寫此方法
partial void OnUnitPriceChanging(global::System.Nullable
{
if (value > 1000)
{
throw new ValidationException("UnitPrice 不能大於 1000");
}
}
}
public class Products_Metadata
{
// [DataType(DataType.EmailAddress)] // 指定要與資料欄位關聯的附加型別的名稱
// [DisplayFormat()] // 格式化輸出
// [Range()] // 指定欄位的範圍約束
// [RegularExpression()] // 正規表示式驗證
// [StringLength()] // 欄位的字元長度驗證
[Required()] // 必填
[UIHint("MyDecimal")] // 使用名為 MyDecimal 的欄位模板
public object UnitPrice;
[DisplayName("產品名稱")] // 指定的欄位所顯示的名稱。在動態資料中,檢視 Products 表,其 header 將顯示為 產品名稱
[StartsWith("webabcd", ErrorMessage = "{0} 必須以 {1} 開頭")] // 應用自定義 ValidationAttribute
public object ProductName { get; set; }
}
// 編寫一個自定義 ValidationAttribute,驗證指定欄位是否是以指定的字串開頭
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
sealed public class StartsWithAttribute : ValidationAttribute
{
readonly string _param;
/**////
/// 建構函式
///
/// 指定的開頭字串
public StartsWithAttribute(string param)
{
_param = param;
}
/**////
/// 是否通過驗證
///
/// 輸入值
///
public override bool IsValid(object value)
{
return ((string)value).ToLower().StartsWith(this._param.ToLower());
}
/**////
/// 格式化錯誤資訊
///
/// 指定的欄位名
///
public override string FormatErrorMessage(string name)
{
return string.Format(ErrorMessageString, name, this._param);
}
}
}
2、以 Products 表為例,演示動態資料的應用
MyProducts.aspx
Inherits="MyProducts" Title="以 Products 表為例,演示動態資料的應用" %>
Namespace="System.Web.UI.WebControls" TagPrefix="asp" %>
以 Products 表為例,演示動態資料的應用
ProductId:
<!--DynamicField - 顯示指定的動態資料欄位,相當於 BoundField-->
<!--DynamicControl - 通過指定的欄位模板顯示指定的動態資料欄位-->
ProductName:
UnitPrice:
ProductId:
ProductName:
<!--
UIHint - 指定欄位模板,此例的欄位模板會以黃色背景顯示資料
Mode - 設定呈現模式 [System.Web.UI.WebControls.DataBoundControlMode 列舉]
DataBoundControlMode.ReadOnly - 只讀模式。預設值
DataBoundControlMode.Edit - 編輯模式
DataBoundControlMode.Insert - 插入模式
-->
UnitPrice:
ProductName:
EnableInsert="True" EnableUpdate="True" EnableDelete="True">
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-557466/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 升級vs2008 sp1時 提示 Vs_shell.msi 缺失解決方案
- .NET 3.5和VS 2008中的ASP.NET AJAXASP.NET
- VS 2008 和 .NET 3.5 Beta 2 簡介
- PowerCommands 在安裝 VS2008 SP1 後無法正常開啟頁面
- VS2010 SP1 正式版本釋出了
- VS2008 .Net 3.5 Remoting程式設計入門三REM程式設計
- Windows 7 / 2008 R2 with SP1 簡體中文版MSDN映象下載Windows
- Windows 2003 SP1 DDK下載Windows
- 談談 Linux SP1 環境變數Linux變數
- 資料編織 (Data Fabric) vs 資料網格 (Data Mesh)
- VS 2008 和.NET 3.5 Beta2常見問題的解決方案
- 解決windows2003 sp1“資料執行保護”惹的禍Windows
- Nginx 1.14.2 移植指南(openEuler 20.03 LTS SP1)Nginx
- 優麒麟Ubuntu Kylin 20.04 Pro SP1 上線Ubuntu
- NIOS II 9.1 SP1 FLASH Programmer 操作詳解iOS
- ASP.NET 動態資料支援ASP.NET
- win8安裝.net3.5
- WindowsServer2008R2安裝SP1補丁出錯(0x800f0818)WindowsServer
- together 2008 sp1 開啟本網站專案後,怎麼看不到四色圖網站
- 微軟新發補丁修復Win7 SP1啟動緩慢問題微軟Win7
- Novell Linux Desktop SP1安裝全攻略(轉)Linux
- Dynamic Wallpaper for Mac(影片動態桌布)Mac
- Dynamic Wallpaper for Mac影片動態桌布Mac
- Dynamic Wallpaper視訊動態桌布
- Dynamic Wallpaper for Mac 動態桌布桌面Mac
- Mac影片動態桌布:Dynamic WallpaperMac
- 動態規劃(Dynamic programming)動態規劃
- Win7預裝家庭普通版 如何升級至SP1Win7
- spring-data-redis 動態切換資料來源SpringRedis
- Dynamic Wallpaper for Mac精美的動態桌布Mac
- Dynamic Wallpaper for Mac(精美的動態桌布)Mac
- 創意動態桌布:Dynamic Wallpaper 中文
- Dynamic Wallpaper Mac精美的動態桌布Mac
- 精美的動態桌布:Dynamic Wallpaper for MacMac
- 「最新」Dynamic Wallpaper for Mac 影片動態桌布Mac
- Mac動態桌布軟體—Dynamic WallpaperMac
- Mac視訊動態桌布:Dynamic WallpaperMac
- 七:BuildingWebApplicationswithVisualStudio2008&ASP.NET3.5UIWebAPPASP.NET