国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

MVC3快速搭建Web應用(一)

開發 前端
最近隨著項目接近尾聲,感覺有必要把自己”拼湊”的這一套基于asp.net mvc 3的Web應用快速開發模式分享出來。順便給此項目做個總結。

最近隨著項目接近尾聲,感覺有必要把自己”拼湊”的這一套基于asp.net mvc 3的Web應用快速開發模式分享出來。順便給此項目做個總結。

關鍵詞:Razor、easyui、Entityframework、T4 、Linq to Entity、Json

1)Razor:ASP.NET MVC3引入了一個新的View引擎.

2)easyui:基于jquery的一個ui界面框架

3)Entityframework:微軟的數據庫關系映射框架

4)T4:代碼生成的模版語法 。MVC中添加控制器和添加視圖對話框執行使用在幕后的 T4 模板的代碼生成。

先來幾個效果圖:

此圖中左邊的菜單欄是通過數據庫配置動態生成,并且與權限掛鉤,權限粒度控制到按鈕級別,即可指派某個角色是否擁有增加、刪除某記錄的權限

圖中列表的header全部都是通過自動生成完成,設備詳細信息頁面經由改造mvc3的details生成。

此編輯界面也是由T4模版自動生成。甚至包括中文label(提取自Powerdesigner中的字段注釋),包括下拉列表,日期選擇框,都是根據判斷數據庫類型自動添加。

#p#

一、使用PowerDesigner搭建數據模型

在EntityFramework中,有兩種開發模式,代碼優先(Code First)與普通的先生成數據庫然后再開發,本項目采用的是后一種。

個人習慣直接搭建概念模型,需求初步敲定后,為物理模型添加細節,在這個期間,給每個字段添加注釋是非常重要的,因為后期你需要根據這些中文注釋來生成界面上的文字。本人使用了一個Powerdesigner中的自動修改腳本來將Name轉換為Commet

  1. Option Explicit  
  2. ValidationMode = True  
  3. InteractiveMode = im_Batch  
  4. Dim mdl 'the current model  
  5. 'get the current active model  
  6. Set mdl = ActiveModel  
  7. If (mdl Is Nothing) Then  
  8. MsgBox "There is no current Model" 
  9. ElseIf Not mdl.IsKindOf(PdPDM.cls_Model) Then  
  10. MsgBox "The current model is not an Physical Data model." 
  11. Else  
  12. ProcessFolder mdl  
  13. End If  
  14.  
  15. 'This routine copy name into code for each table, each column and each view  
  16. 'of the current folder  
  17. Private sub ProcessFolder(folder)  
  18. Dim Tab 'running table  
  19. for each Tab in folder.tables  
  20. if not Tab.isShortcut then  
  21. if Tab.Comment ="" then  
  22. Tab.Comment = tab.name  
  23. else 
  24. Tab.comment=Tab.name &"," &Tab.comment  
  25. End if 
  26. Dim col 'running column  
  27. for each col in tab.columns  
  28. if col.comment ="" then  
  29. col.comment= col.name  
  30. else 
  31. col.comment=col.name & "," &col.comment  
  32. end if 
  33. next  
  34. end if 
  35. next  
  36.  
  37. Dim view 'running view  
  38. for each view in folder.Views  
  39. if not view.isShortcut then  
  40. view.comment = view.name  
  41. end if 
  42. next  
  43.  
  44. 'go into the sub-packages  
  45. Dim f 'running folder  
  46. For Each f In folder.Packages  
  47. if not f.IsShortcut then  
  48. ProcessFolder f  
  49. end if 
  50. Next  
  51. end sub 

上圖為本項目物理模型的縮略圖。

在業務比較復雜的情況下,設計數據庫時,其中數據字段冗余與處理邏輯簡化之間的權衡最為關鍵。最常見是業務域中對象的繼承與組合關系。例如,某些種類的設備擁有特殊信息,而大部分設備的字段都是通用的,這個時候就該權衡是放在多個表還是一個表擁有多個冗余字段,在本案例中,采用一個父表“設備”(包含有所有設備通用的字段),多個種類子表(存儲特殊字段)的設計,減少字段冗余,提高系統擴充性。當然這是針對這個項目的特殊性來設計的,設備的種類變化不會很大。

另外設置一些公共表也是非常有必要的,在本案例中,有一個公共照片表,包含字段有

這樣的話可以給任何信息表添加照片,信息表中包含的數據表記錄編號存的是某個表的主鍵id,表編號存的是對應的信息表。

數據庫設計完畢,利用PowerDesigner直接生成到數據庫。本項目采用的是SQL Server 2008,因為EntityFramework目前只支持微軟自家的東西。

在生成數據庫的過程中,如果你的SQL Server是2005以上,你必須解決:

PowerDesigner 16 Generate Datebase For Sql2005 找不到sysproperties表的問題

#p#

二、給項目添加Entity Framework 支持

假定你的vs2010已經安裝mvc3。

解決方案中只有兩個項目:Domain與WebUI,顧名思義,Domain中涉及的是域模型相關數據訪問,在本項目中也就是Entityframework生成的實體數據模型,WebUI里存放控制器與視圖.

圖中的edmx文件就是我們的實體數據模型。你可以在新建該文件后通過右鍵,添加或刷新數據庫,以便更新當前的實體模型與數據庫匹配。

當你按下保存鍵時,微軟牛逼的T4模版在后臺悄悄地給你生成了一大堆實體類。你可以展開edmx文件查看到它們:

大概是一個這樣的結構:上下文與實體,其中上下文繼承自ObjectContext,姑且可以把它當作三層架構中的數據訪問層,實體類 即三層架構中的實體層。

如果你想深入這個自動生成過程,例如想修改生成后的實體名字,你可以修改edmx的屬性--自定義工具。但我覺得太蛋疼了,所以保持默認的生成方式:EntityModelCodeGenerator,結果我的所有實體類名稱全部都是T_前綴(我數據庫中的表全都以T_開頭)。

至此,你的數據工作準備完畢,注意,你不需要寫一句SQL。并且,將來你對數據庫的任何更改將隨著你在edmx文件上瀟灑的右擊刷新自動同步到你的項目中,一切是辣么的舒服,自然

#p#

三、修改T4模版

這是最為關鍵的一步,貌似也是整個項目中相對于其他步驟來說稍微有技術含量的一步。因為你得了解T4模版語法,你得事先編寫一個完整的增刪改頁面(頁面內容包含Razor語法,easyui,ajax等技術)。

但是當這一步完成后,你的項目就完成70%的工作了。對,沒錯!完成一大半了!

首先來感覺一下T4語法,如果你VS是默認路徑,辣么你可以在這個路徑下找到我們語法非常坑爹的模版(因為至今沒有太智能的編輯器能編輯它們,只能憑感覺手寫了)

C:\Program Files\Microsoft Visual Studio 10.0\Common7\IDE\ItemTemplates\CSharp\Web\MVC 3\CodeTemplates

其中AddController就是你在VS中右鍵添加控制器時執行的模版,AddView是添加視圖時執行的模版。為什么要修改他們?因為我們想要加入jquery,加入easyui,加入Json,想要有更好的頁面體驗與異步處理。

AddController文件夾下有兩個:我們需要修改的是ControllerWithContext.tt,下面會提供下載.內容就不細述了。舉兩個例子就OK了,詳細大家下載后再討論:(cnblogs的編輯器沒有T4的語法著色。只能勉強看了)

  1. public JsonResult List(int page,int rows)  
  2.         {  
  3.               
  4.             var q = from e in db.<#= entitySetName #> orderby e.<#=primaryKey.Name#>  
  5.                     select new 
  6.                     {  
  7. <#int i=0;  
  8.     foreach (ModelProperty property in GetModelProperties(Model.ModelType)) {#>  
  9.                         <#=property.Name #> = e.<#=property.Name #><#if(i!=GetModelProperties(Model.ModelType).Count-1){#>,  
  10. <#}#>  
  11.                         <#   i++; }#>  
  12.                     };  
  13.                       
  14.             var result = q.Skip((page - 1)*rows).Take(rows).ToList();  
  15.             Dictionary<string, object> json = new Dictionary<string, object>();  
  16.             json.Add("total", q.ToList().Count);  
  17.             json.Add("rows", result);  
  18.               
  19.             return Json(json, JsonRequestBehavior.AllowGet);  
  20.         } 

上面這個方法是給控制器增加了一個返回jsonresult的列表方法。眾所周知,數據庫表操作無非就是增刪改查,這個List就是用來支持列表的。參數page與rows是用來支持easyui的grid分頁的。

  1. [HttpPost]  
  2.         public JsonResult Create(<#= modelName #> <#= modelVariable #>)  
  3.         {  
  4.             JsonResult json=new JsonResult();  
  5.             json.Data=true;  
  6.             try{  
  7. <# if(isObjectContext) { #>  
  8.                 db.<#= entitySetName #>.AddObject(<#= modelVariable #>);  
  9. <# } else { #>  
  10.                 db.<#= entitySetName #>.Add(<#= modelVariable #>);  
  11. <# } #>  
  12.                 db.SaveChanges();  
  13.             }  
  14.             catch(Exception ee)  
  15.             {  
  16.                 json.Data=ee.Message;  
  17.             }  
  18.               
  19.             return json;  
  20.         } 

Create是為了支持新建。成功返回json格式的true,失敗返回失敗原因。

本項目中非常多的控制器httpPost方法是返回jsonresult 。目的有兩個:

一:為了支持easyui;二:本項目還有一個客戶端是android平板,控制器當作它的一個遠程數據源,給平板上的應用提供json格式數據。

關于T4模版,你可以參考這里

好,先寫到這。馬上回來。

我的自定義模版下載。未完待續......

原文鏈接:http://www.cnblogs.com/limlee/archive/2012/06/21/2557832.html

責任編輯:張偉 來源: Geek 獅子的博客
相關推薦

2012-06-26 09:37:54

Web

2012-07-11 23:32:33

MVC3項目

2015-06-23 16:42:21

2012-03-13 09:11:46

Web

2012-08-27 10:11:43

ASP.NET

2012-07-16 13:02:01

2014-04-16 11:03:36

MVC3JSON

2012-03-27 14:34:07

Visual Stud微軟MVC

2013-01-10 17:37:22

架構企業級應用架構

2021-01-21 05:49:39

Web開發應用程序

2009-07-24 11:25:53

Web應用程序工程ASP.NET MVC

2010-06-23 08:56:58

ASP.NET MVC

2024-09-29 16:36:16

2010-11-17 12:59:52

2012-10-24 14:53:31

IBMdw

2011-04-15 09:20:56

ASP.NET MVC

2011-04-14 09:19:22

ASP.NET MVC

2016-08-10 16:28:00

WebURLHTTP

2011-04-18 09:35:59

ASP.NET MVC

2009-06-22 11:50:00

J2EE Web應用快速開發
點贊
收藏

51CTO技術棧公眾號

日韩理论片在线| 蜜臀久久久99精品久久久久久| 五月婷婷另类国产| 精品人妻一区二区三区四区在线| 性人久久久久| 亚洲国产天堂久久国产91 | 成人影院在线| 久久久久久久久久久人体| 交100部在线观看| 91精品欧美一区二区三区综合在| 色老板在线视频| 中文字幕制服丝袜一区二区三区| 黄色www网站| 91在线视频网址| 成人观看免费完整观看| 成人性生交大片免费看中文| 三级网在线观看| 蜜桃在线一区二区三区| 免费久久一级欧美特大黄| 日韩欧美影院| 欧美日本在线观看| 国产自产在线视频一区| 女人帮男人橹视频播放| 欧美啪啪一区| 精品日本一区二区三区| 日韩电影在线一区二区三区| 欧美高清一区二区| 裸体一区二区三区| 欧美日韩一区二区视频在线观看 | 中文字幕资源网在线观看| 国产欧美一区二区精品仙草咪| 亚洲不卡一卡2卡三卡4卡5卡精品| 怕怕欧美视频免费大全| 国产91在线播放| 黑人久久a级毛片免费观看| 美女福利精品视频| 日韩av黄色| 日韩中文字幕网址| 久久天天久久| 国产不卡视频在线| 日韩欧美一区二区三区在线视频 | 国产精品三级a三级三级午夜 | 欧美 日韩 国产 一区| 日本一区高清不卡| 亚洲欧美春色| 色七七在线观看| 91小视频免费观看| 激情小视频在线观看| 欧美另类videos死尸| 国产一区二区久久久久| 欧美专区在线观看| 国产精品毛片在线看| 法国空姐在线观看免费| 欧美国产日本视频| 免费观看一二区视频网站| 欧美精品久久99久久在免费线| 超碰在线资源| 18久久久久久| 韩日欧美一区二区三区| a√免费观看在线网址www| 日韩欧美国产一区二区三区| 日韩av大片| 性欧美大战久久久久久久| 7777精品伊人久久久大香线蕉的| 2021天堂中文幕一二区在线观| 欧美一区三区三区高中清蜜桃| 日本一区二区三区久久久久久久久不| 8x8x最新地址| 国产精品白丝在线| 巨大荫蒂视频欧美大片| 久久97久久97精品免视看| 久久久久97| 欧美华人在线视频| 成人影院www在线观看| 欧美日韩视频在线第一区 | 国产精品久久99久久| 在线观看免费黄网站| 久久精品国产一区二区三区免费看| 亚洲精选在线观看| 新版的欧美在线视频| 岛国精品视频在线播放| 成人在线免费观看91| 资源网第一页久久久| 在线精品视频免费播放| 亚洲人成伊人成综合图片| 欧美在线观看成人| 亚洲视频第一页| 国产又粗又猛又爽又黄91精品| 精品视频一二三| 国产精品一国产精品最新章节| 91久久精品一区二区三区| sdde在线播放一区二区| 猫咪av永久| 91免费看片在线| 精品国产乱码久久| 国产精品77777竹菊影视小说| 香蕉成人av| 91看片就是不一样| 欧美在线视频免费播放| 中文字幕欧美区| 久久不见久久见免费视频7| 黄页在线观看| 91在线视频九色| 亚洲精品久久7777777| 91网站在线播放| 欧美日韩网址| 中国字幕a在线看韩国电影| 色婷婷狠狠18| 国产精品免费视频一区二区| 亚洲精品视频在线播放| 99精品桃花视频在线观看| 日韩欧美视频在线播放| 久操视频在线免费播放| 日韩欧美一区三区| 成人黄色片视频网站| 国产一区二区三区在线观看网站| 在线观看免费亚洲| 久久综合久久综合亚洲| 在线日韩欧美| 黄色精品视频| 麻豆免费在线视频| 一本久道综合色婷婷五月| 免费亚洲一区二区| 欧美激情精品久久久久久黑人| 日韩亚洲欧美中文三级| 婷婷激情综合网| 国产精品高潮久久久久无| 可以免费看不卡的av网站| 久久午夜影院| 国产精品久久久久久久久久辛辛| 国产在线日本| 三级视频在线| 高清视频在线www色| 窝窝九色成人影院| 97视频在线免费播放| 中文字幕日韩一区二区三区不卡| av色综合网| 久久久久久国产精品久久| 伊人精品在线观看| 亚洲成人网av| 亚洲精品电影网| 精品国产髙清在线看国产毛片| 欧美日韩国产中文| 欧美三级欧美一级| 欧美日韩精品在线播放| 天天爽夜夜爽夜夜爽精品视频| 国产欧美日韩在线| 久久久久久久久岛国免费| 日本最新不卡在线| 国产在线一区二区| 国产成人亚洲综合色影视| 国产高清在线精品| 99re热视频这里只精品| 成人高清视频免费观看| 国产日产欧美精品一区二区三区| 成人夜色视频网站在线观看| av午夜精品一区二区三区| 国产欧美一二三区| 欧美性xxxx| 亚洲欧美中文另类| 久久99国产精品自在自在app| 亚洲欧美视频在线观看| 亚洲品质自拍视频网站| 国产高潮av| 91亚洲一区精品| 亚洲天堂男人天堂女人天堂| 色综合天天在线| 日韩欧美另类在线| 欧美成人在线影院| 伊人久久五月天| 久久精品福利视频| 亚洲直播在线一区| 一区二区三区四区蜜桃| 国产乱码精品一区二区亚洲 | 女主播福利一区| 秋霞午夜理伦电影在线观看| segui88久久综合9999| 国产精品调教| 成人午夜激情视频| 四虎国产精品成人免费影视| 午夜影院免费看| 欧美精品欧美精品| 久久精品成人欧美大片| 亚洲男人的天堂在线观看| 国产一区视频在线观看免费| 午夜久久中文| 二区三区中文字幕| 欧美三日本三级少妇三99| 久久精品亚洲热| 欧洲精品中文字幕| 亚洲电影视频在线| 超薄肉色丝袜足j调教99| 日韩av第一页| 欧美大片一区二区三区| 久久久久久久久岛国免费| 日韩视频在线观看| 成人性生交大片免费观看网站| 高清hd写真福利在线播放| 午夜视频久久久| 国产成人黄色av|