- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
利用Attribute实现的MVC动态表单
一、何谓动态表单最近再做一个项目,运营只是初步确定了功能,再加上项目比较复杂,所以我不好确定数据库结构我随时有可能在某个表中加一个属性…这时候,如果我有2个页面,分别是 Create 和 Edit,那我就需要对这两个页面进行修改~如果是更多的页面怎么办??那为何不根据Model,自动生成表单呢??网上查到一篇文章,是利用外部XML文件,好吧,我承认在一定程度上能方便一点,但写XML和写Html有什么本质区别吗??二、大家想要怎么样的动态表单?最懒的方法,只要我数据库和Model有变动,别的地方我不用动一行代码,页面就会自动生成最新的表单!好理想的状态~ 其实我就是为了这个目标而做的。虽然上面的方法最方便,但其实并不是如此,因为大部分情况下,表单中不会包含Model所有的属性(比如ID,不可能有吧?~)另外,Create和Edit的时候,表单也是不同的。?所以,个人感觉,一个比较周全的方法,就是在Model的属性上添加Attribute,告诉程序,哪些属性要生成,哪些不要,它们分别在什么时候生成?上图中,我利用了MetadataType(为了配合Entity Framework和MVC数据验证,详细请看我另一篇文章:传送门),然后在MusicMetaData的属性上,加上了Attribute这个Attribute代表,我在Create的时候,需要输入这个属性;在Edit的时候就不需要;Order很好理解了,就是顺序?然后怎么在页面中使用呢?就是这么简单,Create代表我现在是在Create后面是一个lambda表达式,传入的是这个Model属性的名称,和类别(Textbox or TextArea?)最后,就可以自动生成了动态表单了?三、上码?DynamicFormusing System;usingSystem.Collections.Generic;usingSystem.ComponentModel.DataAnnotations;usingSystem.Linq;usingSystem.Text;usingSystem.Web.Mvc;namespaceDS.Web.MVC{ [AttributeUsage(AttributeTargets.Field|AttributeTargets.Property,AllowMultiple=false)]publicclassDynamicFormAttribute : Attribute {privateint order =0;publicint Order {get { return order; }set { order = value; } }privateint type = 0;publicint Type {get { return type; }set { type = value; } }private Dictionarystring, bool state = new Dictionarystring, bool();publicboolthis[string key] {get {if (state.ContainsKey(key)) {return state[key]; }else {returnfalse; } } }///summary///用法示例:DynamicFormAttribute(Create,true,Edit,false)///上述用法:在创建的时候显示,在修改的时候不显示////summarypublicDynamicFormAttribute(paramsobject[] states) {for (int k = 0; k states.Length; k += 2) {state.Add(states[k].ToString(), (bool)states[k + 1]); } } }publicstaticclassHtmlExtensions {///summary///动态生成表单////summary///typeparam name=TModel/typeparam///param name=htmlHelper/param///param name=state状态/param///param name=ItemTemplate模板/param///returns/ret
您可能关注的文档
最近下载
- 2025年新译林版英语7年级上册全册教学课件.pptx
- 2023年黑龙江八一农垦大学公共课《中国近代史纲要》期末试卷B(有答案).docx VIP
- 2025年中央八项规定精神学习教育测试题库及答案.docx VIP
- 医院检验科副主任个人述职报告.pptx VIP
- 识字6《日月明》课件.ppt VIP
- 2023年黑龙江八一农垦大学公共课《中国近代史纲要》期末试卷A(有答案).docx VIP
- 《算法设计与分析基础》(Python语言描述) 课件 第6章分支限界法(2).pptx
- 肥胖对健康的危害与疾病管理题库答案-2025年华医网继续教育.docx VIP
- 法律考试专项试卷.doc VIP
- 景观园林招标技术要求.pdf VIP
原创力文档


文档评论(0)