回 帖 发 新 帖 刷新版面

主题:[原创]从ASP中的多表单提交,看ASP的状态维护

最近修改个网站程序,遇到一个问题,涉及多表单提交.但是论坛里似乎找不到关于此问题的帖子,所以把自认为比较容易理解的一种方法发过来.望大家指教.
程序经过自己在IE里测试过,应该没什么问题.

<BODY>
<%
 Response.Write(Request("e"))   [color=AAAAAA]'获取form2中的隐藏内容e[/color]
 Response.Write(Request("c"))   [color=AAAAAA]'获得form2提交的c中的内容,用于测试比较[/color]
%>

[color=AAAAAA]<!-- 以下javascript代码用于在form2中按提交按钮后所触发的onclick,作用是把form1中a文本框的值赋值给form2中的隐藏内容e,然后再提交表单-->[/color]

<script language="javascript">
 function getword()
 {
  document.form2.e.value=document.form1.a.value;
  form2.submit();
 }
</script>

<form name="form1" method="post" action="">
 <input name="a" type="text" />
 <input name="b" type="submit"/>
</form>

<form name="form2" method="post" action="test.asp">  [color=AAAAAA]<!--该文件在我本地保存为test.asp -->[/color]
 <input name="c" type="text"/>
 <input name="e" type="hidden"/>
 <input name="d" type="button" value="ok" onclick="getword()" />
</form>

</BODY>

说明:因为表单在ASP实际中只能一个一个提交,但是由于某些情况下致使我们需要使用多表单提交,所以必须使用JS来完成其他表单提交操作.在JS自定义函数中用 表单名.submit();命令来实现,但是要获得其他表单中提交的值则未必简单.本人在开始用request.form("名称"),经过实验是获取不到你用JS来提交表单的,例如下面的例子:

<BODY>
<%
 response.Write(request("a"))
 response.Write(request("c"))
%>
<script language="javascript">
 function getword()
 {
  form1.submit();
  form2.submit();  
 }
</script>

<form name="form1" method="post" action="test.asp">
 <input name="a" type="text" />
 <input name="b" type="button" onclick="getword()" value="yes"/>
</form>
<form name="form2" method="post" action="test.asp">
 <input name="c" type="text"/>
 <input name="d" type="button" value="ok" onclick="getword()" />
</form>

</BODY>

随便按哪个提交按钮,IE只会显示出form2里面c的值,而form1里面a的值则无法显示,当然我不好给出原因,但是实验结果确是这样,还可以把上面JSP里面的表单提交顺序改变下,改变为
<script language="javascript">
 function getword()
 {
  form2.submit();
  form1.submit();  
 }
</script>
这下你会发现,这样的情况下,却只能获取form1中a的值了.
所以为了变通,我用了一个hidden的元件,当按form2的提交按钮,那么自动把form1中的a的值通过JSP函数来传递给这个元件,在提交表单2,这样就解决的表单1中参数的获得问题.当然多个表单提交的方法也如此类推就可以.

讨论:ASP中的状态维护
恐怕在刚接触ASP和对ASP很熟悉的程序员来说.ASP中的状态维护始终是一个让人头痛的问题,举个最简单的例子,一个新闻列表的页面,有新闻搜索的功能,还有一个分页的功能,这个情况下我们就会碰到ASP状态维护的问题了,例如,你做了一个新闻查询的操作,然后列出两页查询结果,但是我们按"下一页"的按钮,你在程序中如果没有状态维护的语句,那你会发现之前查询的结果不见了,取而代之的却是全部新闻的第二页.同样,如果这个页面功能在复杂点,有新闻查询,有新闻列表,还有新闻内容的添加,例如你正在添加一个新闻,这时老总过来要你帮他看看刚才那个什么什么新闻有没有发上去,结果你一查,你正在填写的新闻信息就丢失了,看着空白的新闻内容输入框,很郁闷吧.当然可能按后退可以补救,但是如果情况在恶劣点呢......
遇到这样的麻烦,恐怕程序员会抱怨ASP的烦琐性,但是既然我们选择了ASP作为一种开发模式,抱怨归抱怨,解决方法还是要去思考.我自己归纳的方法如下:供大家参考和指正:
1.如我一开始写的多表单提交操作的方法.(这个我就不多说了)
2.超连接传递参数的方法,(恐怕初学者用的最多的就是这个方法,如<A herf="test.asp?username=relax&password=19830425">连接</A>,然后在连接的页面中再用request来获得传递的参数,这种方法很直接,但是问题很明显,例如你有一大串的参数需要传递到新的页面,那么连接地址看上去就比较恐怖了.而且书写也很烦琐.所以除非传递很少的参数,否则本人不推荐用这个方法)
3.存入数据库表的方法.这个其实也很简单,只要对数据库表进行存入和读出操作,就能获得你需要的参数,但是缺点是不通用,因为可能这个页面存储的是5个参数内容,但是另一个页面却有9个,所以在数据库表的设计阶段和需要传递的参数命名上要仔细斟酌斟酌.

当然应该还有其他的方法,大家也可以回贴讨论讨论.

回复列表 (共1个回复)

沙发

一个页面只能提交一个表单。(我是这样认为的)
其实你可以嵌入多个框架实现选择性的多表单提交。iframe 并设定边框为0
还有就是你所说的了,通过javascript设定隐藏文本值然后在提交。

我来回复

您尚未登录,请登录后再回复。点此登录或注册