1

我按照 wiki 中给出的说明在 yii 中创建动态下拉列表,但仍然没有生成第二个下拉列表,这是我的视图文件:

echo CHtml::dropDownList('AccountTypeID','', array(1=>'Admin',2=>'Manager',3=>'Business',4=>'Finance',5=>'Customer Support'),array('ajax' => array('type'=>'POST',
'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
'update'=>'#city_id', //selector to update
))); 


echo CHtml::dropDownList('city_id','', array());

这是我的控制器:

public function actionDynamiccities(){
$data= RefAccountgroup::model()->findAll('parent_id=:parent_id', 
              array(':parent_id'=>(int) $_POST['AccountTypeID']));

$data=CHtml::listData($data,'AccountGroupID','AccountGroupName');
foreach($data as $value=>$name)
{
    echo CHtml::tag('option',
               array('value'=>$value),CHtml::encode($name),true);
}}
4

4 回答 4

2

请注意'ajax'声明

'ajax' => array(
 'type'=>'POST',
 'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
 'update'=>'#city_id', //remember to change it according to this rules #modelname_columnname
 'data'=>array('AccountTypeID'=>'js:this.value'),   //I think you missed this line
 )));

如果您的 firefox 浏览器上安装了 firebug,请尝试查看控制台选项卡,并检查您的下拉列表更改是否成功发送参数AccountTypeID,您也可以看到响应。

于 2013-02-27T11:16:10.850 回答
0

首先,如果您实际上包含指向您尝试遵循的教程的链接,您的问题将会得到改善。

其次,在评论中回答问题时,“它没有发送数据”并没有真正澄清任何事情。在这一点上,我不确定您是否查看过 Firebug 或任何 Web 开发人员工具来检查发布的内容和收到的内容。我的猜测是,如果你看的话,你会看到一个 POST 请求被发出,没有数据被发送,也没有数据被返回。

您的 AJAX 调用没有数据参数,因此$_POST['AccountTypeID']不会被定义,这意味着$data在您的控制器中也将为空。

更新您的 AJAX 以发布 AccountTypeID,例如:

echo CHtml::dropDownList('AccountTypeID',
                         '', 
                         array(1=>'Admin',2=>'Manager',3=>'Business',4=>'Finance',5=>'Customer Support'),
                         array('ajax' => array('type'=>'POST',
                                               'url'=>CController::createUrl('currentController/dynamiccities'), //url to call.
                                               'update'=>'#city_id', //selector to update
                                               'data'=> '$("#AccountTypeID").serialize()',
))); 


echo CHtml::dropDownList('city_id','', array());

您可能需要调整 data 参数以正确解析正确的输入以获取 AccountTypeID - 我只是在上面的示例代码中猜测。

然后,在测试时,确保使用 Firebug 或类似工具来检查正在发布的内容,并确保您传递了 AccountTypeID。

于 2013-02-05T17:40:15.960 回答
0

很简单。您需要在模型上声明一个与下拉列表同名的公共变量。前任。在您的模型 public mydropdown 中;

在你看来

echo $form->dropDownList($model, 'mydropdown',array('1'=>'hello','2'=>'bye'));

于 2013-07-24T05:22:34.253 回答
-1

不确定这是否有帮助,但是...

echo CHtml::dropDownList('city_id','', array('id' => 'city_id'));

于 2013-02-06T06:27:42.710 回答