- 浏览: 44002 次
文章分类
- 全部博客 (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 938soap 的开发其实是wsdl到java的一个开发过程 ... -
Hadoop启动时出现Unrecognized option: -jvm 和 Could not create the Java virtual machine
2012-02-07 13:34 5479http://javoft.net/2011/06/h ... -
Multiple operations have reported errors Select an error to view its details
2012-01-31 16:53 1762<div id="blog_content&q ... -
Android开发之自定义动画
2012-01-11 16:54 2545<h1>Android开发之自定义动画&l ... -
Android开发之初识Camera图像采集
2012-01-11 15:39 3973<h1>Android开发之初识Camer ... -
PPT打包成EXE常用方法
2011-12-28 13:18 958<span style="fon ... -
android Launch Mode and Flags
2011-12-28 11:44 760android:allowTaskReparen ... -
Spring JMS 整合Tomcat和ActiveMQ
2011-12-21 14:34 22891.Active MQ安装配置 1.1.下载并解压A ... -
重载运算符之前++和后++
2011-12-21 10:19 1179<span style="font-f ... -
一网络能连接后提示用户的小程序
2011-12-20 11:59 796国庆节放假期间整个小区断网4天,家里没办法上网,基本都 ... -
看流程图,写代码。
2011-12-19 12:59 2302看流程图,写代码。<br><br&g ... -
写个小程序QQMessage 熟悉一下界面控件的使用
2011-12-15 16:14 1404首先,代表我个人祝所有看到此日志的朋友新年快乐!! ... -
把.NET程序部署到没有安装.NET Framwork的机器上
2011-12-15 13:04 897<div class="text1&q ... -
突然想说说IP地址欺骗
2011-12-15 12:04 716<font size="3" ... -
将SVG文件嵌入到网页中的问题 并说object和embed标记
2011-12-14 14:44 1429<p class="MsoNormal ... -
FindBugs无法使用的问题
2011-12-13 11:44 1698<p class="MsoNorma ... -
《疯狂的程序员》
2011-12-13 10:19 610《疯狂的程序员》 年前,去书店,发现了一本书,摆在推荐 ... -
开微博
2011-12-12 13:09 618这里毕竟是CSDN,一个国内领先的IT技术站点。我这里 ... -
Android采用SharedPreferences保存用户登录信息
2011-12-09 11:39 4128[size=small;]??? Androi ... -
paypal注册难吗?
2011-12-09 10:25 872可能是因为浏览器的问题,很多外贸用户在注册paypal ...
相关推荐
ASP.NET MVC 2 新闻系统是一个专为初学者设计的项目,旨在帮助开发者熟悉ASP.NET MVC2框架在构建新闻发布应用中的具体应用。这个小型系统提供了基础的新闻管理功能,包括新闻的添加、编辑和展示,是学习MVC2开发流程...
- **URL映射**:ASP.NET MVC提供了一种灵活的方式来定义URL路由规则,使得开发者可以根据需要创建简洁的URL。例如,`/products/edit/4`可以映射到`ProductsController`类的`Edit`方法。 - **视图模板**:支持使用...
特别是ASP.NET MVC 2版本引入了一系列新功能,极大地简化了验证过程,并增强了用户体验。本文将详细介绍如何使用ASP.NET MVC 2框架来实现客户端验证,重点介绍DataAnnotation验证特性的使用。 #### 二、ASP.NET MVC...
Asp.Net MVC5是一个强大的Web应用程序开发框架,它结合了Model-View-Controller(MVC)设计模式,提供了一种组织和构建动态网站的有效方式。同时,我们将假设数据库选用的是Oracle,一个广泛使用的关系型数据库管理...
- **第一个ASP.NET MVC 应用**:通过一个简单的“Hello World”应用示例,引导读者快速上手。 **第2章:Controllers(控制器)** - **控制器的基本概念**:解释控制器在MVC架构中的角色及职责。 - **创建控制器**:...
ASP.NET MVC(Model-View-Controller)是一种基于微软.NET Framework的开源web应用程序开发框架,它为构建可维护、可测试且具有高度分离关注点的Web应用程序提供了强大的支持。本实例旨在帮助初学者理解并掌握ASP...
- **第2章:构建简单的ASP.NET MVC应用** - **环境搭建**:介绍安装Visual Studio等工具的过程。 - **项目创建**:指导如何创建一个新的ASP.NET MVC项目。 - **基本功能实现**:如主页显示、用户登录等。 - **第...
Razor视图引擎则是.NET MVC中用于渲染HTML模板的一种强大语法,它使得在C#或VB.NET代码中嵌入HTML变得简单而直观。在这个".NET MVC @Razor"项目中,我们将会探讨如何利用这些技术来实现常见的Web应用功能,如增删改...
在创建一个ASP.NET MVC项目时,会自动生成一些默认的文件和目录,如Controllers、Models、Views等。每个目录都有其特定的作用: - **Controllers**:包含应用程序的控制器类,每个类通常对应一个特定的视图或功能。...
ASP.NET是微软公司推出的用于构建Web应用程序的开发框架,它提供了一种高效、安全且易于维护的方式来构建动态网站、Web服务以及丰富的互联网应用。在这个项目中,我们主要探讨ASP.NET 2.0版本所涉及的核心技术和在...
ASP.NET是一种由微软开发的服务器端Web应用程序框架,用于构建动态网站、 web 应用程序和 web 服务。在这个“asp.net简单博客”的项目中,我们可以深入探讨ASP.NET如何被用来实现一个基本的博客系统,这将涵盖以下几...
ASP.NET是一种由微软开发的服务器端Web应用程序框架,主要用于构建动态网站、Web应用程序和Web服务。在这个"用ASP.NET做的简易留言板(带验证码)"项目中,开发者利用ASP.NET的特性和功能实现了一个基本的在线交流平台...
ASP.NET是一种基于.NET Framework的服务器端网页开发技术,由微软公司推出,旨在简化Web应用程序的构建过程。在ASP.NET框架下,开发人员可以利用丰富的工具和API来创建动态、交互式的网页应用。在这个"简易_图片存储...
表单的`action`属性通过`Url.Action`方法动态生成,指向控制器中的`upload2`方法。表单中包含一个文件上传控件和一个提交按钮。 **后台控制器(HomeController)代码解析:** ```csharp public ActionResult upload...
ASP.NET MVC 是一种用于构建动态网站的应用程序框架,它采用了 Model-View-Controller(模型-视图-控制器)设计模式。这种模式有助于将业务逻辑、用户界面以及应用流程控制分开,从而提高开发效率和维护性。 - **...
- ASP.NET是一种服务器端技术,可以生成动态网页。 - 它提供了多种开发模式,如Web Forms、MVC、Web API和Blazor。 - Web Forms是ASP.NET最初提供的模型,使用控件驱动的方式构建页面。 - MVC(Model-View-...
在ASP.NET环境中,生成验证码涉及编程技术,包括图像处理、随机数生成以及字体操作等。本篇文章将详细探讨如何在ASP.NET中创建验证码源代码。 首先,我们需要了解验证码的基本原理。验证码通常包含一组随机生成的...
ASP.NET MVC 3.0 是一个用于构建动态网站的开源框架,它结合了ASP.NET的灵活性和模型-视图-控制器(MVC)设计模式的优势。这个实例旨在提供一个简单的入门指南,帮助开发者理解如何在实际项目中运用ASP.NET MVC 3.0...