使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之三

[前言]上个月,我提交了两篇同系列的文章:
使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之一   (简称“之一”)
使用Asp.net mvc + Linq + mvc_scaffold_gen_setup.exe 生成一个完整的家庭帐册大管家程序 之二   (简称“之二”)
时隔3个礼拜,终于又可以记录点滴心得,这个时候往往是最开心的,一种收获的感觉,不为别的,借此机会理理思路,给自己找个不玩游戏的理由……
      这三个礼拜过的很不一般,白天要上班,晚上回来难的有点时间打开程序写写,又不熟悉,进展很慢,资料也少。周末一边忙着看火箭比赛,一边抓紧睡懒觉,同学约我出去k歌,还要想好不去的理由。上上周末,部门组织去扬州旅游,吃了干丝、狮子头,扬州炒饭当然也少不了,玩了瘦西湖和何园,很开心,和同事在一起比较放松,来回车上大家在一起打牌、玩杀人游戏,不亦悦乎。与其说是玩,不如说是增进同事之间的感觉吧。可惜的是,大学同宿舍的扬州同学失去联系,没见上一面,在这里祝他一切顺利!对了,记得dudu是扬州人,在扬州的那个夜晚,我还去网吧了,打开博客园的时候,还真的想到dudu……
      说到工作,这几天忙着给项目升级,从.net1.1升级到2.0,很烦很无奈,没什么经验,进度很慢,错误很多,改得很辛苦,下次整理一下,我把经验心得拿出来和大家分享。
      废话不说了,进入正题。
[正文]
      记得在“之二”文章末尾,我留了三个问题
之二留下的问题1)页面上使用的服务器端控件Reapter,在CodeFile中居然必须声明,否则无法识别,为什么会这样?所有服务器控件都必须声明,我之前看的一个例子就没有,怎么回事?麻烦各位帮我找找原因。
    [2008.04.17晚回答]在解决方案上右键——>Convert to Web Applications就可以把解决方案变成Web Application的形式。这一个Convert其实就是给每个页面(比如Test.aspx)增加对应的Test.designer.cs的文件,然后页面上的控件的声明全部放在这里。其实这个答案应该早就想到,只是太专注于MVC,反而忘了根本的web Application文件结构。
    2)在修改之前的页面代码中的foreach语句,可以使用<%=Html.ActionLink("Edit","Edit",new {id = item.ChildClassID})%>来很方便很直接地放置一个Edit链接,链接地址是ChildClass/Edit/[ChildClassID],
    现在问题是,我使用了Reapter控件直接绑定数据源之后,怎样才可以类似<%=Html.ActionLink("Edit","Edit",new {id = item.ChildClassID})%>这样的写法,直接生成一个Edit的链接呢?疑惑在于,在Reapter中无法把[ChildClassID]传到<%=Html.ActionLink("Edit", "Edit", ……)%>中的"……"中。
    解决方法是:用new {id = Eval("ChildClassID")}来代替其中item.ChildClassID
    3)2008.04.17补充一个问题:显示ChildClass信息的时候,由于Model.ChildClassInfo中仅有PrimaryClassID属性 ,但如果要显示出PrimaryClassID对应的PrimaryClassName,那该如何实现?在Model.ChildClassInfo中增加PrimaryClassName属性??还是在Controllers中进行匹配?补充:这其实是类设计的范畴,和mvc没多大关系的。
    问题一已经解决,Convert to Web Applications即可。
    问题二已经解决,用new {id = Eval("ChildClassID")} 来代替其中的item.ChildClassID即可
    问题三也已经解决,详细方法可以参考本文末提供下载的Demo中Model/ClassViewData.cs这个文件中的代码,独立构造用List、New、Edit的复杂实体类。

[功能介绍]
    下面说说本次发布的程序中的功能点:
全部功能(参见“之二”中的“业务介绍”)都可以使用了,支出、收入、借出等都比较好理解。
转账是在两个账户之间的金额移动,这个也比较好理解。关于账户,之前忘了加上金额这个字段,这次补上了,可参考本次提供下载的最新的数据库脚本,增加了2个字段。
别的也没什么说的,只是自己后来还手动添加了一个Linq表达式,用于分别获取属于“收入”的子类和属于“支出”的子类,因为Linq to classes这个生成的代码没有提供类似功能。
    大家可以注意下Model/ClassViewData.cs中的实体类构成,基本上Edit、List、New等功能都是直接和这几个实体类关联,可以说是VO吧,不知道概念有没有用错。
    另外,至于程序中的几个delete操作的做法,我们先不管业务上是否正确合理,暂时为了方便,姑且如此吧。其实我更想加个字段Isvalid,Delete操作仅仅更改该字段Isvalid为0,但是,懒得改了...还有,程序中几乎没有验证数据有效性等功能。

[心得总结]
    关于这次的帐册程序的想法,我先是列出了功能点,然后建库,但是依然有点缺漏,中间加了两次字段,只能说是自己需求没有整理清楚。每次修改数据库,是很麻烦也极其不推荐的一件事,特别是像这样使用Linq to classes的类来生成ORM代码,还要重新添加一遍dbml文件。还有,我习惯给每个实体类命名为“[数据库中的名字]Info”,但是每次生成dbml的时候,Model类都被改变,幸好有VS的重构功能,修改n个地方即可,n等于数据表的个数……
[结束语]
    也不知道再写些什么,最近比较犯困,哈欠不断,不说了,传上程序和脚本再说。有问题不明白的可以回复在下面,我尽力回答。希望大家多提点意见,一方面学习下mvc,另一方面也为这个家庭帐册发展得更好。对了,我打算给它增加“理财计划”等类似功能。
[资料下载]
最新程序下载:AccountBook0506_newest.rar
最新数据库脚本下载:AccountBookDB0506_newest.rar
(便于区别,之二中提供的两个下载文件,暂时不删除。)
[信息反馈]
    ……
posted @ 2008-05-06 22:54  Kevin Lin  阅读(3042)  评论(14编辑  收藏  举报