我按照维基中给出的说明在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);
}}
答案 0 :(得分: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 ,您也可以看到响应。< / p>
答案 1 :(得分:0)
首先,如果您确实包含了您尝试遵循的教程的链接,那么您的问题就会得到改善。
其次,在评论中回答问题时,“它没有发送数据”并没有真正澄清任何内容。此时,我不确定您是否查看了Firebug或任何Web开发人员工具来检查发布的内容和收到的内容。我的猜测是,如果你看起来你会看到一个POST请求,没有数据被发送,也没有返回数据。
您的AJAX调用没有数据参数,因此不会定义$_POST['AccountTypeID']
,这意味着控制器中的$data
也将为空。
更新您的AJAX以POST 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());
您可能需要调整数据参数以正确解析正确的输入以获取AccountTypeID - 我只是在上面的示例代码中猜测。
然后,在测试时,请务必使用Firebug或类似的方法来检查POST的内容,并确保传递了AccountTypeID。
答案 2 :(得分:0)
很简单。您需要在模型上声明一个与下拉列表同名的公共变量。防爆。 在你的模型中 公开mydropdown;
在您的视图中
echo $ form-&gt; dropDownList($ model,'mydropdown',array('1'=&gt;'hello','2'=&gt;'bye'));
答案 3 :(得分:-1)
不确定这是否有帮助,但......
echo CHtml :: dropDownList('city_id','',array('id'=&gt;'city_id'));