1

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

问题是现在当我更改国家下拉列表并刷新页面时,我的国家下拉列表选择的值保持不变,但城市正在从默认国家加载。

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

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 中设置选定的国家/地区值。

4

2 回答 2

0

您不应该使用刷新来执行此操作,这会使控制器逻辑过于复杂。使用 javascript 根据国家/地区列表更改城市列表。您可能想使用 ajax 来获取城市列表。

于 2011-09-07T05:07:18.430 回答
0

我不确定是否理解。您在同一页面上有两个下拉列表,您想要做的是根据第一个中的选定元素更新第二个的元素?因此用户必须点击刷新按钮来更新第二个列表?

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

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

于 2011-09-06T09:37:17.893 回答