該工具是經過一個github上的開源項目修改的原始做者https://github.com/Superexpert/WebFormsScaffolding 我在他的基礎上添加了一對多實體類的新增,修改,刪除操做,並實現了Repository設計模式,修改了一些頁面佈局,添加了一些DynamicData動態字段,個人開源項目地址https://github.com/neozhu/WebFormsScaffolding,歡迎你們下載或一塊兒完善。css
該工具集成在vs.net 2013纔有的Scaffolding一個代碼生成的組件本來自帶的是用於MVC項目根據Entity class生成MVC Controller和View的新增,修改,刪除操做。安裝了這個工具後那麼Webfrom項目也能夠根據事先定義好的Entity 生成查詢,新增,修改,刪除 頁面和後臺數據操做。git
http://files.cnblogs.com/neozhu/WebAPP.zipgithub
代碼生成的例子設計模式
訪問https://github.com/neozhu/WebFormsScaffoldingide
獲取最新代碼,使用vs.net 2013打開後編譯完成就能夠安裝工具
安裝完成後在vs.net 中就有Web Forms Scaffolding這個組件佈局
使用Code-First EntityFrameworkui
新建一個Product實體類編碼
public class Productspa
{
[Key]
public int Id { get; set; }
[Display( Name="商品編碼"),MaxLength(10),Required]
public string SKU { get; set; }
[Display(Name = "品名"), MaxLength(50), Required]
public string Name { get; set; }
[Display(Name = "規格"), MaxLength(20)]
public string Model { get; set; }
[Display(Name = "單位"), MaxLength(10)]
public string Unit { get; set; }
[Display(Name = "單價")]
public decimal Price { get; set; }
[Display(Name = "數量")]
public int Qty { get; set; }
}
一個Company實體類+Department實體類,一對多的關係
public class Company
{
public Company()
{
Departments = new HashSet<Department>();
}
[Key, Display(Name = "系統編碼")]
public int Id { get; set; }
[Display(Name="公司名稱"), MaxLength(10), Required]
public string Name { get;set;}
[Display(Name = "地址"), MaxLength(50)]
public string Address { get; set; }
[Display(Name = "聯繫人"), MaxLength(10)]
public string ContactName { get; set; }
[Display(Name = "聯繫電話"), MaxLength(20)]
public string ContactPhone { get; set; }
public virtual ICollection<Department> Departments { get; set; }
}
public class Department
{
public Department()
{
}
[Key,Display(Name = "系統編碼")]
public int Id { get; set; }
[Display(Name="部門名稱"),Required,MaxLength(20)]
public string Name { get; set; }
public int Company_Id{get;set;}
[ForeignKey("Company_Id")]
public Company Company { get; set; }
}
實體類字段上的驗證好比Required,Display會在生成的Form和Gridview中體現,包括負責的正則表達驗證均可以實現。
修改App Start目錄下RouteConfig.cs
public static class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
var settings = new FriendlyUrlSettings();
settings.AutoRedirectMode = RedirectMode.Permanent;
routes.EnableFriendlyUrls(settings);
var DefaultModel = new MetaModel(true);
DefaultModel.RegisterContext(
new Microsoft.AspNet.DynamicData.ModelProviders.EFDataModelProvider(() => new WebAPP.Models.MyDbContext()),
new ContextConfiguration { ScaffoldAllTables = true });
}
}
用於GridView綁定外鍵字段列時,系統自動判斷使用ForeignKey 動態字段類型
在你項目的文件夾下add-new scaffolded item…
選擇Product Model,Data Context,選擇模板頁文件
建立完成後,項目會新增一個Repositories文件
DataProvider文件夾下就是實現Repistory設計模式的產生的類庫文件,包括CRUD方法和一個Context工廠類模型
Extensions文件夾下的ControlExtensions用於擴展formview,gridview的一些方法
DynamicData文件夾下動態列字段,也能夠新建好比DateTime
Products文件夾實現Product模型相關的方法
項目目錄下Products目下生成的5個操做頁面
編譯成功後運行
查詢頁面,
新增頁面
編輯頁面
全部頁面功能都已經實現,頁面的css徹底使用最近Boostrap 3.3
下面是一對多的模板
公司下面會有多個部門。生成的樣式以下
子表編輯,單擊add
上述功能的實現無需再添加任何代碼就能夠完成。
T4模板在生成頁面時居然不支持中文,在模板中輸入中文,生成代碼後是亂碼
若是存在多個子表的狀況使用Boostrap tabs控制時
$(function () {
//$("#tabs").tabs();
$('.nav-tabs a:first').tab('show')
每次操做沒法停留在當前的Tab選項卡