Yii在选择其他选项时填充下拉列表

Yii在选择其他选项时填充下拉列表,yii,yii-cmodel,yii-booster,yii-cformmodel,Yii,Yii Cmodel,Yii Booster,Yii Cformmodel,我有一个下拉列表,当选择另一个下拉列表中的项目时,我希望填充该下拉列表。这两个下拉列表都与从控制器传递的数据/模型相关联。第一个下拉列表是通过调用模型中的函数从DB中填充的。这是表格 echo $form->dropDownListRow($modelunit, 'superunit', $model->getSunits(), array( 'ajax' => array( 'type'=&g

我有一个下拉列表,当选择另一个下拉列表中的项目时,我希望填充该下拉列表。这两个下拉列表都与从控制器传递的数据/模型相关联。第一个下拉列表是通过调用模型中的函数从DB中填充的。这是表格

echo $form->dropDownListRow($modelunit, 
        'superunit',
        $model->getSunits(), 
        array(
        'ajax' => array(
        'type'=>'POST',
        'url'=>CController::createUrl('user/getunits'),
        'update'=>'#unit_id',
        ))); 

echo CHtml::dropDownList('unit_id','', array());
下面是Ajax调用的action user/getunits

$data=Unit::model()->findAll('sid=:sid', 
                  array(':sid'=>(int) $_POST['superunit']));

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

当选择第一个下拉列表时,我不断收到一个错误“UndefinedIndex:superunit”。另外,您可能会注意到我在第一个下拉列表中使用了form->dropDownListRow,而在第二个下拉列表中使用了CHtml::dropDownList。这是因为我不知道如何确切地确保下拉列表正确地填充了ajax并正确地绑定到模型

您使用
$form->dropDownListRow
这就是为什么您会在服务器端收到
$\u POST['MyModelName']['superunit']

像这样更改代码

$data=Unit::model()->findAll('sid=:sid', 
                      array(':sid'=>(int) $_POST['MyModelName']['superunit']));
其中
MyModelName
是您使用的模型)

或者

echo CHtml::dropDownList('superunit'.....

对于其他人,wiki可能会有所帮助。

您使用
$form->dropDownListRow
这就是为什么您将在服务器端获得
$\u POST['MyModelName']['superunit']

像这样更改代码

$data=Unit::model()->findAll('sid=:sid', 
                      array(':sid'=>(int) $_POST['MyModelName']['superunit']));
其中
MyModelName
是您使用的模型)

或者

echo CHtml::dropDownList('superunit'.....

对于其他人-维基可能会有所帮助。

很抱歉再次打扰您。这段代码可以很好地用于create。更新操作不起作用。我不断得到错误“get_class()期望参数1是对象,数组给定”。如果我删除下拉列表,就不会有错误。有什么问题吗。确保您拥有最新的Yii(从github获取)。2.尝试通过切换(开/关)第二个下拉菜单进行调试。3.尝试按照Yii(深入框架代码)提供的堆栈跟踪进行调试。4.尝试提供Yii堆栈跟踪的屏幕截图。我想视图代码很好,我知道了发生这种情况的原因。该表单用于使用关系将输入保存到多个表/模型。其中一个关系是HAS_MANY(1:N),我猜它在填充更新表单时返回一个数组对象,因此出现了错误。我正在努力寻找解决方案,但迄今为止失败了。很抱歉再次打扰您。这段代码可以很好地用于create。更新操作不起作用。我不断得到错误“get_class()期望参数1是对象,数组给定”。如果我删除下拉列表,就不会有错误。有什么问题吗。确保您拥有最新的Yii(从github获取)。2.尝试通过切换(开/关)第二个下拉菜单进行调试。3.尝试按照Yii(深入框架代码)提供的堆栈跟踪进行调试。4.尝试提供Yii堆栈跟踪的屏幕截图。我想视图代码很好,我知道了发生这种情况的原因。该表单用于使用关系将输入保存到多个表/模型。其中一个关系是HAS_MANY(1:N),我猜它在填充更新表单时返回一个数组对象,因此出现了错误。我试图找到一个解决方案,但迄今为止失败了。