1

用户点击提交按钮后,如何将下拉菜单重置为菜单的“空白”选项?我正在使用一个用 php 和 HTML 设置的 MVC,以及具体的 5库。提前致谢!这是我到目前为止所拥有的:

控制器代码:

public function authorize() {
    $selectHost = array('' => '');
    foreach ($this->host->getHostInfo() as $row) {
        if (isset($row['HARDWARE_id'])) {
            $selectHost[$row['id']] = $row['host'];
        }
    }
    $this->set('selectHost',$selectHost);
    $postCheck=array(array('param' => 'host',
                           'check' => '^[0-9]{1,50}$',
                           'error_msg' => 'Invalid Host ID'),
    );
    $post = scrub($_POST,$postCheck);
    if (isset($post['host'])) {
        $this->host->authorize($post['host']);
        $this->set('test', "<p>  The host has successfully been authorized.</p>");
    }
    else{
        $this->set('failed', "<p>Invalid Host ID</p>");
    }
}

查看代码:

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>">
<?php
    $form = Loader::helper('form');
    print $form->label('host', 'Host: ');
    print $form->select('host', $selectHost);
?>
<?php   
    print $form->submit('Submit','Submit');
    echo $test;
    echo $failed;
?>
</form>
4

4 回答 4

0

如果问题是 Concrete5 表单助手的行为不符合您的要求,那么就不要使用它们——而只需使用常规的 HTML 表单输入。

<form method="post" enctype="multipart/form-data" action="<?=$this->action('authorize')?>">
<label for="host">Host: </label>
<select id="host" name="host">
<?php foreach ($selectHost as $value => $text): ?>
    <option value="<?php echo htmlentities($value); ?>"><?php echo htmlentities($text); ?></option>
<?php endforeach; ?>
</select>

<input type="submit" value="Submit" />
<?php   
    echo $test;
    echo $failed;
?>
</form>
于 2013-05-16T00:26:50.453 回答
0

由于它是表单提交,因此您只想更改视图中“下拉框”/选择的值。提交后,您将获得新的页面加载;因此,在每种情况下,您都希望显示默认值,而不是当前值$selectHost

在你看来,改变这个

print $form->select('host', $selectHost);

对此

print $form->select('host', $selectHost, null);

根据http://www.concrete5.org/documentation/developers/forms/standard-widgets

于 2013-05-13T15:32:04.143 回答
0

我非常肯定没有办法覆盖 C5 的愿望,即采用 POSTed 值并将其用作默认值。即使按照 TWR 的建议,您指定了一个值。(这通常是一件好事,因为如果页面被 POST 到并且出现错误,您不想显示数据库中的值;您想显示 POST 中的内容)。

您可以很容易地覆盖表单助手。

但是,我建议您在成功提交后进行重定向(不要在错误后重定向 - 这样 POSTed 值将很有用)到页面。您可以重定向到另一个页面或相同的页面,最好使用确认消息。有关使用重定向的示例,请参见https://github.com/concrete5/concrete5/blob/master/web/concrete/core/controllers/single_pages/dashboard/blocks/stacks.php#L23 。

这是解决您的问题的最佳实践,但也因为使用您当前的代码,如果有人点击刷新,它将重新发布数据并重新授权主机。

于 2013-05-15T23:24:58.580 回答
0

我认为您可以使用(javascript)onsubmit 操作来扩展表单标签,该操作会进行重置。

于 2013-05-13T15:27:38.050 回答