我对CGI Perl有点不高兴,我正在开发一个使用'mode'和'action'变量来确定加载哪些页面的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”)将在提交表单时更改操作。 我无法弄清楚为什么会发生这种情况,是否存在影响我不知道的这两个变量的因素?
我现在需要做的是在同一表单上有两个按钮,一个用于设置保存表单数据的操作,另一个用于保存表单数据但导航到具有该表单数据的另一个模式/页面
如果有人能够至少指出我正在研究的方向,我会非常感激。
答案 0 :(得分:0)
默认情况下,CGI模块实现一种称为“粘性”字段的状态保留行为。这种方法的工作方式是,如果要重新生成表单,生成表单字段值的方法将询问param()以查看查询字符串中是否存在类似命名的参数。如果他们找到一个名称相同的参数,他们将使用它来设置默认值。
你想要
hidden(-name=>'action', -value=>$new_value, -override=>1)
或
hidden(-name=>'action', -value=>'default_value')
param('hidden_name', $new_value);
答案 1 :(得分: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'。