百度空间 | 百度首页 
               
 
查看文章
 
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%的预览功能了(除非把文件实际上传到服务器上)。

   

类别:Web | 添加到搜藏 | 浏览() | 评论 (4)
 
最近读者:
 
网友评论:
1
2008-07-12 22:05 | 回复
哈哈,转型很快呀!
 
2
2008-07-16 13:34 | 回复
我没转型啊
 
3
2008-07-17 10:05 | 回复
我是说由php改到.net呀
 
4
2008-07-18 01:01 | 回复
现在又转回来了
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu