CakePHP下拉菜单在刷新页面时没有显示正确的数据

时间:2011-09-06 08:15:24

标签: php cakephp cakephp-1.3 drop-down-menu page-refresh

我的两个下拉列表一个用于国家/地区,另一个用于我页面上的城市。 当我最初加载页面时,我将国家/地区设置为从用户注册加载的默认国家/地区。然后我加载该国家的城市。

现在的问题是,当我更改国家/地区下拉菜单并刷新页面时,我的国家/地区下拉列表选定值仍然相同但已更改,但城市正在从默认国家/地区加载。

我在控制器的视图中获得了正确的值,但是视图没有正确设置。 我视图中的代码如下

echo $this->Form->input('from_country_code',
            array(
            'options'=>$countries,
            'id'=>'from_country_code',
            'label' => __('Country',true),
            'selected'=>$selectedCountryCode
            )
        );

其次,请解释一下我如何检测页面是否刷新并保留更改的下拉值并且不执行整个操作控制器代码。

任何帮助都将受到高度赞赏。

已更新 - 这是我的控制器代码

function add() {

    $currentUser = $this->Auth->user();
    $countryMap = $this->requestAction('/countries/getList/');
    $this->set('countries',$countryMap);
    $this->set('selectedCountryCode',$currentUser['City']['countriesCode']);

    $cityMap = $this->requestAction('/cities/getListByCountryCode/'.$currentUser['City']['countriesCode']);
    $this->set('cities',$cityMap);

    if(!empty($this->data)) {
        if($this->Request->saveAll($this->data)) {
            $this->Session->setFlash('The Request was successfully Posted');
            $this->redirect(array('controller'=>'users','action'=>'requests'));
        }   else {
            $this->Session->setFlash('The Request was not saved. Please try again');
        }
    }

}

请注意,我遇到的问题是,在页面刷新时,国家/地区下拉列表的选定属性设置不正确。即使我刷新页面,我已经检查了控制器的值是否正确。

我在此变量@selectedCountryCode中设置所选国家/地区值。

2 个答案:

答案 0 :(得分:0)

我不太明白。您在同一页面上有两个下拉列表,您想要做的是根据第一个中的所选元素更新第二个元素?因此,用户必须点击刷新按钮才能更新第二个列表?

如果这是你的意思,我认为这根本不是用户友好的,甚至不是在互联网上导航的标准方式。最重要的是,当您点击刷新按钮时,再次执行整个控制器操作是绝对正常的。实际上,点击刷新按钮意味着“请再次执行网页逻辑”。

如果您想要以更友好的方式更新第二个下拉列表,您应该搜索Javascript方式来执行此操作。例如,请参阅:http://nuts-and-bolts-of-cakephp.com/2010/03/10/use-cakephp-jquery-to-build-dynamic-selects/

答案 1 :(得分:0)

你不应该使用refresh来做到这一点,这会使控制器逻辑过于复杂。使用javascript根据国家/地区列表更改城市列表。您可能希望使用ajax来获取城市列表。