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