摘 要:報(bào)表在企業(yè)信息系統(tǒng)中具有極其重要的作用,隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,傳統(tǒng)C/S模式的企業(yè)信息系統(tǒng)都在向B/S模式遷移,報(bào)表填報(bào)作為信息系統(tǒng)中的一個(gè)重要模塊,在開發(fā)過程中占據(jù)了相當(dāng)大的比重。本文介紹了一種基于ASP.NET MVC框架的快速開發(fā)報(bào)表填報(bào)的模塊的方案。
關(guān)鍵詞:報(bào)表填報(bào) ASP.NET MVC 模型綁定
中圖分類號(hào):TP2 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1672-3791(2013)06(b)-0025-01
報(bào)表填報(bào)模塊的主要開發(fā)任務(wù)在于用戶界面、輸入控制、自動(dòng)計(jì)算以及數(shù)據(jù)持久化的實(shí)現(xiàn),當(dāng)報(bào)表簡單的時(shí)候,可能不需要太多的代碼就能完成這部分的工作,而在報(bào)表復(fù)雜的時(shí)候,這部分的工作量會(huì)變得相當(dāng)繁重且容易出錯(cuò)。面對(duì)這部分的開發(fā)任務(wù)時(shí),開發(fā)人員總是希望能夠有一種簡單的、可靠的方式快速完成這部分的工作。本文基于ASP.NET MVC框架,通過其中的模型綁定技術(shù),實(shí)現(xiàn)了報(bào)表填報(bào)模塊的快速開發(fā)。
1 相關(guān)技術(shù)介紹
1.1 ASP.NET MVC框架
ASP.NETMVC是微軟公司提供的以MVC模式為基礎(chǔ)的ASP.NETWeb應(yīng)用程序框架,通過把項(xiàng)目分成Model、View和Controller,使得復(fù)雜項(xiàng)目更加容易維護(hù),可以方便的控制應(yīng)用程序的行為,適合大型團(tuán)隊(duì)項(xiàng)目開發(fā)。
1.2 ASP.NET MVC的模型綁定技術(shù)
ASP.NET MVC模型綁定通過引入自動(dòng)填充控制器操作參數(shù)的抽象層、處理通常與使用ASP.NET請求數(shù)據(jù)有關(guān)的普通屬性映射和類型轉(zhuǎn)換代碼來簡化控制器操作。模型綁定的過程包括2個(gè)步驟:從請求收集值并使用這些值填充模型。這2個(gè)步驟分別由值提供程序和模型綁定程序來完成,這部分的實(shí)現(xiàn)可以參考ASP.NETMVC的相關(guān)資料,這里就不做闡述了。
2 實(shí)現(xiàn)方案
ASP.NET MVC的項(xiàng)目包括Model、View和Controller,下面我們通過一個(gè)簡單的表單逐一介紹這些模塊的實(shí)現(xiàn)。
2.1 Model和數(shù)據(jù)層
在我們進(jìn)行到填報(bào)模塊的開發(fā)的時(shí)候,數(shù)據(jù)庫結(jié)構(gòu)通常都已經(jīng)確定了,我們需要實(shí)現(xiàn)各個(gè)表單對(duì)應(yīng)的實(shí)體和其數(shù)據(jù)訪問層,這部分的代碼和數(shù)據(jù)庫表相對(duì)應(yīng),而且基本相似,可以通過代碼生成器來生成。我們使用代碼生成器生成對(duì)應(yīng)的數(shù)據(jù)實(shí)體類主要代碼如下:
[EntityProperty(MappingTable="TP1",MappingColumn="iD",PropertyType= OracleType.Number)]
public string iD { get { return this["iD"]; } set { this["iD"] = value; }}
每個(gè)數(shù)據(jù)庫字段對(duì)應(yīng)一個(gè)實(shí)體類的屬性,并用一個(gè)自定義的元數(shù)據(jù)指明這個(gè)字段映射的數(shù)據(jù)庫表名,字段名稱,以及其數(shù)據(jù)類型。
同時(shí),我們使用代碼生成器生成了該實(shí)體的數(shù)據(jù)庫操作類,實(shí)現(xiàn)了對(duì)該表單的基本數(shù)據(jù)庫操作實(shí)現(xiàn)。
2.2 View和頁面邏輯實(shí)現(xiàn)
報(bào)表通常都有自己固定的樣式,所以,在實(shí)現(xiàn)用戶界面之前,我們可以通過word,excel或者其他工具先把這個(gè)報(bào)表的樣子按照需要做出來,并在其對(duì)應(yīng)的數(shù)據(jù)部分標(biāo)明為數(shù)據(jù)庫字段,然后通過另存為、導(dǎo)出之類的方式得到包含數(shù)據(jù)庫字段標(biāo)簽的HTML文檔,再通過正則表達(dá)式進(jìn)行查找替換,將標(biāo)簽替換為實(shí)體變量,這樣就得到了View的基本代碼,這個(gè)過程的代碼示例如下:
替換前的Html源碼:
替換后的View代碼:
這部分Html代碼的樣式都由設(shè)計(jì)工具生成,我們只替換了數(shù)據(jù)部分的代碼,為每個(gè)字段提供了一個(gè)呈現(xiàn)和一個(gè)文本框輸入。
由于報(bào)表的特殊性,字段之間的值可能使用公式來計(jì)算獲得,基于JavaScript引擎,我們實(shí)現(xiàn)了一個(gè)簡單的公式添加方法,只要在視圖上定義一個(gè)公式數(shù)組即可,如:
var exp=["f1=f2+f3+f6+f7", "f6=f1+f4+f5"]。
當(dāng)用戶修改對(duì)應(yīng)文本框的值的時(shí)候,頁面會(huì)自動(dòng)進(jìn)行公示計(jì)算。
2.3 控制器和模型綁定
當(dāng)用戶訪問這個(gè)報(bào)表的時(shí)候,有2種情況,新建一個(gè)報(bào)表進(jìn)行填寫或者修改這個(gè)報(bào)表的數(shù)據(jù),對(duì)于這種情況,我們需要提供一個(gè)針對(duì)HttpGET請求的訪問控制器,主要代碼如下:
[HttpGet]
public PartialViewResult P1(string id)
{
P1 eo=new P1() { sUnitCode=id };
var dal=new P1DAL();
eo=dal.GetEntity(id) as P1;
return PartialView(eo);
}
同時(shí)我們需要提供一個(gè)處理HttpPost的訪問控制器以處理用戶新建或者修改報(bào)表后的回發(fā),主要代碼如下:
[HttpPost]
public ActionResult P1(P1 model)
{
var bll=new P1Bll();
bll.UpdateAdd(model);
return RedirectToAction("P1",new{id=model.sUnitCode });
}
這個(gè)控制器僅用一行代碼就完成了數(shù)據(jù)庫操作,實(shí)現(xiàn)這個(gè)神奇過程的關(guān)鍵正是ASP.NETMVC的模型綁定技術(shù)。
3 結(jié)語
通過上面的示例,我們實(shí)現(xiàn)了一個(gè)簡單報(bào)表填報(bào)頁面的搭建,整個(gè)過程需要書寫的關(guān)鍵代碼大概有10來行,在報(bào)表的字段非常多的時(shí)候,使用本方案可以大幅的減少開發(fā)時(shí)間,提高效率。
參考文獻(xiàn)
[1] 李金方.Web報(bào)表系統(tǒng)的研究與實(shí)現(xiàn)[D].北京交通大學(xué),2009.
[2] 宋建松.基于ole技術(shù)調(diào)用EXCEL實(shí)現(xiàn)復(fù)雜報(bào)表生成[J].內(nèi)蒙古電大學(xué)刊,2006(10).
[3] 盧俊瑋,常琳,陳昀錕.MVC模式與ASP.NET MVC框架的技術(shù)研究[J].電腦知識(shí)與技術(shù),2010,6(19).