一种基于MVC架构的报表填报模块快速实现

时间:2022-09-18 08:42:28

一种基于MVC架构的报表填报模块快速实现

摘 要:报表在企业信息系统中具有极其重要的作用,随着互联网技术的发展,传统C/S模式的企业信息系统都在向B/S模式迁移,报表填报作为信息系统中的一个重要模块,在开发过程中占据了相当大的比重。本文介绍了一种基于 MVC框架的快速开发报表填报的模块的方案。

关键词:报表填报 MVC 模型绑定

中图分类号:TP2 文献标识码:A 文章编号:1672-3791(2013)06(b)-0025-01

报表填报模块的主要开发任务在于用户界面、输入控制、自动计算以及数据持久化的实现,当报表简单的时候,可能不需要太多的代码就能完成这部分的工作,而在报表复杂的时候,这部分的工作量会变得相当繁重且容易出错。面对这部分的开发任务时,开发人员总是希望能够有一种简单的、可靠的方式快速完成这部分的工作。本文基于 MVC框架,通过其中的模型绑定技术,实现了报表填报模块的快速开发。

1 相关技术介绍

1.1 MVC框架

MVC是微软公司提供的以MVC模式为基础的Web应用程序框架,通过把项目分成Model、View和Controller,使得复杂项目更加容易维护,可以方便的控制应用程序的行为,适合大型团队项目开发。

1.2 MVC的模型绑定技术

MVC模型绑定通过引入自动填充控制器操作参数的抽象层、处理通常与使用请求数据有关的普通属性映射和类型转换代码来简化控制器操作。模型绑定的过程包括2个步骤:从请求收集值并使用这些值填充模型。这2个步骤分别由值提供程序和模型绑定程序来完成,这部分的实现可以参考MVC的相关资料,这里就不做阐述了。

2 实现方案

MVC的项目包括Model、View和Controller,下面我们通过一个简单的表单逐一介绍这些模块的实现。

2.1 Model和数据层

在我们进行到填报模块的开发的时候,数据库结构通常都已经确定了,我们需要实现各个表单对应的实体和其数据访问层,这部分的代码和数据库表相对应,而且基本相似,可以通过代码生成器来生成。我们使用代码生成器生成对应的数据实体类主要代码如下:

[EntityProperty(MappingTable="TP1",MappingColumn="iD",PropertyType= OracleType.Number)]

public string iD { get { return this["iD"]; } set { this["iD"] = value; }}

每个数据库字段对应一个实体类的属性,并用一个自定义的元数据指明这个字段映射的数据库表名,字段名称,以及其数据类型。

同时,我们使用代码生成器生成了该实体的数据库操作类,实现了对该表单的基本数据库操作实现。

2.2 View和页面逻辑实现

报表通常都有自己固定的样式,所以,在实现用户界面之前,我们可以通过word,excel或者其他工具先把这个报表的样子按照需要做出来,并在其对应的数据部分标明为数据库字段,然后通过另存为、导出之类的方式得到包含数据库字段标签的HTML文档,再通过正则表达式进行查找替换,将标签替换为实体变量,这样就得到了View的基本代码,这个过程的代码示例如下:

替换前的Html源码:

$f1$

替换后的View代码:

@Model.f1 @Html.TextBoxFor(model=> Model.f1,new{@class="edititem"})

这部分Html代码的样式都由设计工具生成,我们只替换了数据部分的代码,为每个字段提供了一个呈现和一个文本框输入。

由于报表的特殊性,字段之间的值可能使用公式来计算获得,基于JavaScript引擎,我们实现了一个简单的公式添加方法,只要在视图上定义一个公式数组即可,如:

var exp=["f1=f2+f3+f6+f7", "f6=f1+f4+f5"]。

当用户修改对应文本框的值的时候,页面会自动进行公示计算。

2.3 控制器和模型绑定

当用户访问这个报表的时候,有2种情况,新建一个报表进行填写或者修改这个报表的数据,对于这种情况,我们需要提供一个针对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的访问控制器以处理用户新建或者修改报表后的回发,主要代码如下:

[HttpPost]

public ActionResult P1(P1 model)

{

var bll=new P1Bll();

bll.UpdateAdd(model);

return RedirectToAction("P1",new{id=model.sUnitCode });

}

这个控制器仅用一行代码就完成了数据库操作,实现这个神奇过程的关键正是MVC的模型绑定技术。

3 结语

通过上面的示例,我们实现了一个简单报表填报页面的搭建,整个过程需要书写的关键代码大概有10来行,在报表的字段非常多的时候,使用本方案可以大幅的减少开发时间,提高效率。

参考文献

[1] 李金方.Web报表系统的研究与实现[D].北京交通大学,2009.

[2] 宋建松.基于ole技术调用EXCEL实现复杂报表生成[J].内蒙古电大学刊,2006(10).

[3] 卢俊玮,常琳,陈昀锟.MVC模式与 MVC框架的技术研究[J].电脑知识与技术,2010,6(19).

上一篇:韩国政府推进云计算发展策略初探① 下一篇:浅谈数字媒体手段在展示中的应用