- 浏览: 42642 次
文章分类
- 全部博客 (29)
- java (29)
- ava框架数据库连接池比较(c3p0 (1)
- dbcp和proxool)bonecp (1)
- 并发编程的Java抽象 (1)
- Comparing PHP Frameworks ( Symfony (1)
- CakePHP (1)
- YII and CodeIgniter) (1)
- 简单的Unit Test理解 (1)
- mysql concat函数 字符串连接 (1)
- PHP学习笔记(一) (1)
- Struts2 工作流程 (1)
- 关于Java性能监控您不知道的5件事 (1)
- paypal注册难吗? (1)
- Android采用SharedPreferences保存用户登录信息 (1)
- 开微博 (1)
- 《疯狂的程序员》 (1)
- FindBugs无法使用的问题 (1)
- 将SVG文件嵌入到网页中的问题 并说object和embed标记 (1)
- 突然想说说IP地址欺骗 (1)
- 把.NET程序部署到没有安装.NET Framwork的机器上 (1)
- 写个小程序QQMessage 熟悉一下界面控件的使用 (1)
- 看流程图,写代码。 (1)
- ASP.NET MVC 2生成动态表单的一种最简单的思路 (1)
- 一网络能连接后提示用户的小程序 (1)
- 重载运算符之前++和后++ (1)
- Spring JMS 整合Tomcat和ActiveMQ (1)
- android Launch Mode and Flags (1)
- PPT打包成EXE常用方法 (1)
- Android开发之初识Camera图像采集 (1)
- Android开发之自定义动画 (1)
- Multiple operations have reported errors Select an error to view its details (1)
- Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine (1)
- pjhjava soap的开发 (1)
最新评论
-
wolf_awp:
受不了啊,这种东西都能到首页去。
看流程图,写代码。 -
depravedangel:
原帖:http://blog.csdn.net/arui319 ...
写个小程序QQMessage 熟悉一下界面控件的使用 -
depravedangel:
05年的帖子,直接拷贝过来,LZ不厚道
写个小程序QQMessage 熟悉一下界面控件的使用 -
depravedangel:
判断QQ是否隐身是怎么做的的?
写个小程序QQMessage 熟悉一下界面控件的使用
ASP.NET MVC 2生成动态表单的一种最简单的思路
在BPM、OA等系统中,都会存在一个表单设计器。有些是通过操作gridview来完成一个表单的设计;有些是通过类似VS拖拽的方法完成一个表单的设计。很明显后面一种优越于前面一种。无论是哪种,最后都会产生一些XML之类的表单结构的数据。
这篇文章将讲述,在表单设计器设计好表单之后,在ASP.NET MVC中如何将表单结构的xml转换成实际应用系统中的表单。看下面一个xml文件,我们假设它是由一个表单设计器设计出来的。
<span style="color: blue;"><?</span><span style="color: #a31515;">xml </span><span style="color: red;">version</span><span style="color: blue;">=</span>"<span style="color: blue;">1.0</span>" <span style="color: red;">encoding</span><span style="color: blue;">=</span>"<span style="color: blue;">utf-8</span>" <span style="color: blue;">?> <</span><span style="color: #a31515;">form </span><span style="color: red;">name</span><span style="color: blue;">=</span>"<span style="color: blue;">form1</span>"<span style="color: blue;">> <</span><span style="color: #a31515;">field </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">text</span>" <span style="color: red;">name </span><span style="color: blue;">=</span>"<span style="color: blue;">firstname</span>" <span style="color: red;">class </span><span style="color: blue;">=</span>"<span style="color: blue;">textbox</span>" <span style="color: red;">left</span><span style="color: blue;">=</span>"<span style="color: blue;">300</span>" <span style="color: red;">top</span><span style="color: blue;">=</span>"<span style="color: blue;">200</span>"<span style="color: blue;">></span>朱<span style="color: blue;"></</span><span style="color: #a31515;">field</span><span style="color: blue;">> <</span><span style="color: #a31515;">field </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">text</span>" <span style="color: red;">name </span><span style="color: blue;">=</span>"<span style="color: blue;">lastname</span>" <span style="color: red;">class </span><span style="color: blue;">=</span>"<span style="color: blue;">textbox</span>" <span style="color: red;">left</span><span style="color: blue;">=</span>"<span style="color: blue;">700</span>" <span style="color: red;">top</span><span style="color: blue;">=</span>"<span style="color: blue;">200</span>"<span style="color: blue;">></span>祁林<span style="color: blue;"></</span><span style="color: #a31515;">field</span><span style="color: blue;">> <</span><span style="color: #a31515;">field </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">text</span>" <span style="color: red;">name </span><span style="color: blue;">=</span>"<span style="color: blue;">sex</span>" <span style="color: red;">class </span><span style="color: blue;">=</span>"<span style="color: blue;">textbox</span>" <span style="color: red;">left</span><span style="color: blue;">=</span>"<span style="color: blue;">300</span>" <span style="color: red;">top</span><span style="color: blue;">=</span>"<span style="color: blue;">240</span>"<span style="color: blue;">></span>男<span style="color: blue;"></</span><span style="color: #a31515;">field</span><span style="color: blue;">> <</span><span style="color: #a31515;">field </span><span style="color: red;">type</span><span style="color: blue;">=</span>"<span style="color: blue;">text</span>" <span style="color: red;">name </span><span style="color: blue;">=</span>"<span style="color: blue;">age</span>" <span style="color: red;">class </span><span style="color: blue;">=</span>"<span style="color: blue;">textbox</span>" <span style="color: red;">left</span><span style="color: blue;">=</span>"<span style="color: blue;">700</span>" <span style="color: red;">top</span><span style="color: blue;">=</span>"<span style="color: blue;">240</span>"<span style="color: blue;">></span>24<span style="color: blue;"></</span><span style="color: #a31515;">field</span><span style="color: blue;">> </</span><span style="color: #a31515;">form</span><span style="color: blue;">> </span>
<a href="http://11011.net/software/vspaste"></a>
下面,我将把它转化成实际的asp.net mvc系统中的表单。首先,使用LinqtoXML将上面的XML文件转换成XElement,代码如下。在控制器中最好不要直接读取文件,这里为了简单直观起见,就直接在Controller中读取xml文件了。
[<span style="color: #2b91af;">AcceptVerbs</span>(<span style="color: #2b91af;">HttpVerbs</span>.Get)] <span style="color: blue;">public </span><span style="color: #2b91af;">ActionResult </span>Index() { <span style="color: #2b91af;">XElement </span>xml = <span style="color: #2b91af;">XElement</span>.Load(Server.MapPath(<span style="color: #a31515;">"~/App_Data/form1.xml"</span>)); ViewData[<span style="color: #a31515;">"xml"</span>] = xml; <span style="color: blue;">return </span>View(); } 接着我们将在View中,将上面的XElement转换成真正的HTML表单。
在表单设计器中很难的一块就是控件的定位。从我提供的XML中可以看到,它里面是存放了位置信息的。这使我们想到了div的绝对布局。这个方法在这种情况下非常的适合。
下面,我定义两个字符串模板:
<span style="color: blue;">string </span>label = <span style="color: #a31515;">" <div style=/"left: {0}px; position: absolute; top: {1}px/">{2}</div>"</span>; <span style="color: blue;">string </span>input = <span style="color: #a31515;">"<input name=/"{0}/" type=/"{1}/" class=/"{2}/" style=/"left: {3}px; position: absolute; top: {4}px/" value=/"{5}/" />"</span>;
<a href="http://11011.net/software/vspaste"></a><span style="font-family: Courier New;"> label用于显示文本信息,input用于显示表单上的value。下面通过循环产生html脚本。</span>
<span style="color: #2b91af;">StringBuilder </span>sb = <span style="color: blue;">new </span><span style="color: #2b91af;">StringBuilder</span>(); sb.Append(<span style="color: #a31515;">" <div style=/"height:200px/"> "</span>); <span style="color: blue;">foreach</span>(<span style="color: #2b91af;">XElement </span>f <span style="color: blue;">in </span>xml.Elements()) { sb.Append(<span style="color: blue;">string</span>.Format(label, <span style="color: blue;">int</span>.Parse(f.Attribute(<span style="color: #a31515;">"left"</span>).Value) - 60, f.Attribute(<span style="color: #a31515;">"top"</span>).Value, f.Attribute(<span style="color: #a31515;">"name"</span>).Value)); sb.Append(<span style="color: blue;">string</span>.Format(input, f.Attribute(<span style="color: #a31515;">"name"</span>).Value, f.Attribute(<span style="color: #a31515;">"type"</span>).Value, f.Attribute(<span style="color: #a31515;">"class"</span>).Value, f.Attribute(<span style="color: #a31515;">"left"</span>).Value, f.Attribute(<span style="color: #a31515;">"top"</span>).Value, f.Value)); } sb.Append(<span style="color: #a31515;">"</div > "</span>);
<a href="http://11011.net/software/vspaste"></a><span style="font-family: Courier New;"> 最后通过Response.Write(sb.ToString())输出。</span>
<span style="font-family: Courier New;"> 整个View的代码如下:</span>
<div>
<span style="background: yellow;"><%</span><span style="color: blue;">@ </span><span style="color: maroon;">Page </span><span style="color: red;">Language</span><span style="color: blue;">="C#" </span><span style="color: red;">MasterPageFile</span><span style="color: blue;">="~/Views/Shared/Site.Master" </span><span style="color: red;">Inherits</span><span style="color: blue;">="System.Web.Mvc.ViewPage" </span><span style="background: yellow;">%> </span><span style="color: blue;"><</span><span style="color: maroon;">asp</span><span style="color: blue;">:</span><span style="color: maroon;">Content </span><span style="color: red;">ID</span><span style="color: blue;">="Content1" </span><span style="color: red;">ContentPlaceHolderID</span><span style="color: blue;">="TitleContent" </span><span style="color: red;">runat</span><span style="color: blue;">="server"> </span>Home Page <span style="color: blue;"></</span><span style="color: maroon;">asp</span><span style="color: blue;">:</span><span style="color: maroon;">Content</span><span style="color: blue;">> <</span><span style="color: maroon;">asp</span><span style="color: blue;">:</span><span style="color: maroon;">Content </span><span style="color: red;">ID</span><span style="color: blue;">="Content2" </span><span style="color: red;">ContentPlaceHolderID</span><span style="color: blue;">="MainContent" </span><span style="color: red;">runat</span><span style="color: blue;">="server"> </span><span style="background: yellow;"><%</span> <span style="color: #2b91af;">XElement </span>xml = (<span style="color: #2b91af;">XElement</span>)ViewData[<span style="color: #a31515;">"xml"</span>]; <span style="background: yellow;">%></span> <span style="background: yellow;"><%</span>Html.BeginForm(); <span style="background: yellow;">%></span>
<span style="background: yellow;"><% </span> <span style="color: blue;">string </span>label = <span style="color: #a31515;">" <div style=/"left: {0}px; position: absolute; top: {1}px/">{2}</div>"</span>; <span style="color: blue;">string </span>input = <span style="color: #a31515;">"<input name=/"{0}/" type=/"{1}/" class=/"{2}/" style=/"left: {3}px; position: absolute; top: {4}px/" value=/"{5}/" />"</span>; <span style="color: #2b91af;">StringBuilder </span>sb = <span style="color: blue;">new </span><span style="color: #2b91af;">StringBuilder</span>(); sb.Append(<span style="color: #a31515;">" <div style=/"height:200px/"> "</span>); <span style="color: blue;">foreach</span>(<span style="color: #2b91af;">XElement </span>f <span style="color: blue;">in </span>xml.Elements()) { sb.Append(<span style="color: blue;">string</span>.Format(label, <span style="color: blue;">int</span>.Parse(f.Attribute(<span style="color: #a31515;">"left"</span>).Value) - 60, f.Attribute(<span style="color: #a31515;">"top"</span>).Value, f.Attribute(<span style="color: #a31515;">"name"</span>).Value)); sb.Append(<span style="color: blue;">string</span>.Format(input, f.Attribute(<span style="color: #a31515;">"name"</span>).Value, f.Attribute(<span style="color: #a31515;">"type"</span>).Value, f.Attribute(<span style="color: #a31515;">"class"</span>).Value, f.Attribute(<span style="color: #a31515;">"left"</span>).Value, f.Attribute(<span style="color: #a31515;">"top"</span>).Value, f.Value)); } sb.Append(<span style="color: #a31515;">"</div > "</span>); Response.Write(sb.ToString()); <span style="background: yellow;">%></span> <span style="color: blue;"><</span><span style="color: maroon;">input </span><span style="color: red;">type</span><span style="color: blue;">="submit" </span><span style="color: red;">value</span><span style="color: blue;">="Submit!" /> </span><span style="background: yellow;"><%</span>Html.EndForm(); <span style="background: yellow;">%></span> <span style="color: blue;"></</span><span style="color: maroon;">asp</span><span style="color: blue;">:</span><span style="color: maroon;">Content</span><span style="color: blue;">> </span>
效果:
1、显示XML表单:
<img style="display: inline; border-width: 0px;" title="ggg" src="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/ASP.NETMVC2_5E2/ggg_thumb.jpg" border="0" alt="ggg" width="823" height="322">
<span style="font-family: Courier New;">2、</span>提交表单:
<img style="display: inline; border-width: 0px;" title="hhh" src="http://images.cnblogs.com/cnblogs_com/zhuqil/WindowsLiveWriter/ASP.NETMVC2_5E2/hhh_thumb.jpg" border="0" alt="hhh" width="818" height="194"> <a href="http://11011.net/software/vspaste"></a>
总结:这个是一种通过表单设计器产生动态表单最简单的方式。也是非常通用的一种方式。在产生html的时候,你可以带上Jquery的验证的脚本。当然还有很多的扩展和完善。点击下载本文代码。
求助与讨论:开发表单设计器是我心里的一块石头,估计也是很多正在开发BPM、OA之类童鞋心中的一块石头。最近一直在思考这个问题,从这篇文章可以看到,我我设计的表单设计器上的控件可以随意拖放的。在生成HTML的时候,使用div的绝对布局,打算朝这个方向做,不知道可行否。下面是我想到的一些问题:
1、采用什么技术或者模式开发表单设计器;2、如何最好的定位;3、在设计器上如何操作表格以及主从表;4、数据源的绑定;5、数据的验证;
如果你开发过表单设计器、或者有这方面的研究和心得、或者有这方面的兴趣、欢迎在此一起讨论。
发表评论
-
pjhjava soap的开发
2012-02-07 16:50 883soap 的开发其实是wsdl到java的一个开发过程 ... -
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine
2012-02-07 13:34 5424http://javoft.net/2011/06/h ... -
Multiple operations have reported errors Select an error to view its details
2012-01-31 16:53 1688<div id="blog_content&q ... -
Android开发之自定义动画
2012-01-11 16:54 2497<h1>Android开发之自定义动画&l ... -
Android开发之初识Camera图像采集
2012-01-11 15:39 3915<h1>Android开发之初识Camer ... -
PPT打包成EXE常用方法
2011-12-28 13:18 916<span style="fon ... -
android Launch Mode and Flags
2011-12-28 11:44 715android:allowTaskReparen ... -
Spring JMS 整合Tomcat和ActiveMQ
2011-12-21 14:34 22411.Active MQ安装配置 1.1.下载并解压A ... -
重载运算符之前++和后++
2011-12-21 10:19 1131<span style="font-f ... -
一网络能连接后提示用户的小程序
2011-12-20 11:59 749国庆节放假期间整个小区断网4天,家里没办法上网,基本都 ... -
看流程图,写代码。
2011-12-19 12:59 2261看流程图,写代码。<br><br&g ... -
写个小程序QQMessage 熟悉一下界面控件的使用
2011-12-15 16:14 1321首先,代表我个人祝所有看到此日志的朋友新年快乐!! ... -
把.NET程序部署到没有安装.NET Framwork的机器上
2011-12-15 13:04 852<div class="text1&q ... -
突然想说说IP地址欺骗
2011-12-15 12:04 678<font size="3" ... -
将SVG文件嵌入到网页中的问题 并说object和embed标记
2011-12-14 14:44 1372<p class="MsoNormal ... -
FindBugs无法使用的问题
2011-12-13 11:44 1650<p class="MsoNorma ... -
《疯狂的程序员》
2011-12-13 10:19 565《疯狂的程序员》 年前,去书店,发现了一本书,摆在推荐 ... -
开微博
2011-12-12 13:09 575这里毕竟是CSDN,一个国内领先的IT技术站点。我这里 ... -
Android采用SharedPreferences保存用户登录信息
2011-12-09 11:39 4082[size=small;]??? Androi ... -
paypal注册难吗?
2011-12-09 10:25 833可能是因为浏览器的问题,很多外贸用户在注册paypal ...
相关推荐
Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程 Asp.Net MVC案例教程
本书共分为12章,以符合初学者思维的方式系统地介绍ASP.NET MVC的应用技巧,并结合实际项目详细地介绍如何基于ASP.NET MVC构建企业项目。通过本书的学习,读者可以全面掌握ASP.NET MVC的开发,并从代码中获取软件...
ASP.NET MVC从一开始的设计思路就与Struts不同,它的映射是利用路由配置而非xml,从而大大降低了开发复杂度,并且比Struts要更直观,更容易上手。可是,这并不表明ASP.NET MVC就是尽善尽美的。以下是MVC的一个项目...
asp.net MVC4 CMS 完整的源代码,学习和提高asp.net mvc4可以参考一下。
AngularJS 开发 ASP.NET MVC.
ASP.NET MVC 2 原版书籍 ASP.NET MVC 2 原版书籍 ASP.NET MVC 2 原版书籍
ASP.net MVC3 中文教程ASP.net MVC3 中文教程ASP.net MVC3 中文教程ASP.net MVC3 中文教程
asp.net mvc4 ztree 连接数据库 动态生成菜单简单demo
ASP.NET MVC 5 - 开始MVC 5之旅 2. ASP.NET MVC 5 - 控制器 3. ASP.NET MVC 5 - 视图 4. ASP.NET MVC 5 - 将数据从控制器传递给视图 5. ASP.NET MVC 5 - 添加一个模型 6. ASP.NET MVC 5 - 创建连接字符串并使用SQL ...
MVC专家“梦之队”对ASP.NET MVC 4的全新诠释 由Microsoft专家和极受敬重的软件开发社区负责人撰写的《ASP.NET MVC 4高级编程(第4版)》将带您学习最前沿的Web框架:ASP.NET MVC 4。本书开篇简要介绍ASP.NET MVC框架...
The power of ASP.NET MVC 5 stems from the underlying ASP.NET platform. To make your ASP.NET MVC applications the best they can be, you need to fully understand the platform features and know how they ...
ASP.NET MVC 是微软官方提出的一种Web开发框架,通过M是模型(model)-V视图(view)-C控制器(controller)l来设计创建Web应用程序。截至目前最新版本是MVC5,相对于之前的版本MVC5其可扩展性、易用性等方面都不很大的...
ASP.NET MVC5高级编程(第5版.NET开发经典名著)作为Microsoft备受欢迎的MVC技术的最新版本,MVC 5是一个成熟的Web应用程序框架,支持快速的、TDD友好的开发。MVC允许开发人员创建动态的、数据驱动的网站。这样的...
ASP.NET MVC 4 in Action is a hands-on guide that shows you how to apply ASP.NET MVC effectively. After a high-speed ramp up, this thoroughly revised new edition explores each key topic with a self-...
asp.net mvc 弹出窗口 技巧asp.net mvc 弹出窗口 技巧asp.net mvc 弹出窗口 技巧asp.net mvc 弹出窗口 技巧
ASP.NET MVC5 高清完整版,适合新手学习,理解MVC架构
dwz框架 asp.net mvc3;dwz框架 asp.net mvc3;dwz框架 asp.net mvc3
Pro ASP.NET MVC 5 (精通ASP.NET MVC5框架) 中文+英文+配套源代码
Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3,Asp.Net mvc 3