查看文章 |
form提交失败后怎么保留用户输入数据
2008-07-11 22:56
在form提交后,如果服务器端验证发现错误,当再次呈现form页面时怎么保留form提交前的表单值? 这个问题在asp.net中基本上不用考虑,因为asp.net中form的action都是自身页面,form提交之后表单值被二次加载到服务器端控件中,这样再次输出form页面表单值已经填好了。但是如果你没有一个像asp.net那样健全的web框架呢? 这个问题的关键就在于form提交是否提交到自身页面(指form页面)、表单默认值的输出是否统一(表单呈现时始终从数据对象中取值)。我觉得解决这个问题最好的办法就是用ajax方式来提交表单,这样页面不刷新,表单值不会丢失,从根本上避免了这个问题。例如用JQuery,很简单的代码$.post(url,$(form).serialzie())就能提交。 如果这个问题再复杂一些:form页面需要加上预览功能,预览页面上再加上提交和返回编辑功能。我的解决方式如下:form页面输出时用统一的数据对象(data)填充表单值,点预览时把表单提交向预览页面(preview),预览页面使用和form页面一一对应的hidden字段来存储用户输入的数据(如果麻烦的话可以考虑用一个字段存储所有字段的json值),在预览页提交时通过ajax提交,点返回编辑时直接把所有hidden值提交到form页面,在form页面解析所有的值存入data对象,然后进入正常的输出流程。 这种解决方式可以让表单提交到任意页面,并且整个过程中都用表单提交来传输数据,保证用户输入的值不会丢失。 如果情况更复杂:需要上传文件。那么表单提交不能用ajax方式,并且表单提交后页面刷新,文件地址会丢失(也不能在服务器端设置input type=file的值,浏览器安全限制)。当然可以让页面在一个iframe里提交,但是无论如何不能提供100%的预览功能了(除非把文件实际上传到服务器上)。 |
最近读者: