2

我有点 CGI Perl 的新手,并且正在开发一个使用“模式”和“动作”变量来确定加载哪些页面的 Web 应用程序。

$mode   = param('mode');
$action = param('action');

  if ($mode eq 'page1') {

      if ($action 'eq') {

          &performAction;
      }
      displayPage1;
  }
  elsif ($mode eq 'page2') {

      &displayPage2
  }

在开发过程中,在表单提交后尝试导航到不同的模式/操作时,我一直无法找出设置这些变量的最佳方法。

在某些情况下,在表单中添加隐藏值会起作用

hidden(-name=>'action',-value=>'save')

但有时它不会。在后者的情况下,将 param('action',"save") 放在表单之前将在提交表单时更改操作。 我无法弄清楚为什么会发生这种情况,是否有影响我不知道的这两个变量的因素?

我现在需要做的是在同一个表单上有两个按钮,一个将设置保存表单数据的操作,另一个将保存表单数据但导航到具有该表单数据的另一个模式/页面。

如果有人至少能指出我应该研究的正确方向,我将不胜感激。

4

2 回答 2

0

默认情况下,CGI 模块实现了一种称为“粘性”字段的状态保持行为。它的工作方式是,如果您正在重新生成表单,生成表单字段值的方法将询问 param() 以查看查询字符串中是否存在类似名称的参数。如果他们找到同名参数,他们将使用它来设置默认值。

你要

hidden(-name=>'action', -value=>$new_value, -override=>1)

或者

hidden(-name=>'action', -value=>'default_value')

param('hidden_name', $new_value);
于 2012-09-20T02:24:30.553 回答
0

这是一个尝试,不确定它是否有效。

尝试在按钮之前设置隐藏变量并在每个按钮之前更改它,因此应该采用新值。

例如:

<input type='hidden' name='op' value='save'/>
<input type='submit' name='Save Form' value='SaveForm'/>
<input type='hidden' name='op' value='submit'/>
<input type='submit' name='Submit Form' value='SubmitForm'/>
<input type='hidden' name='op' value='cancel'/>
<input type='submit' name='Cancel Form' value='CancelForm'/>

您可以在 perl 脚本中检查隐藏变量“op”。

于 2012-09-20T08:22:25.653 回答