Yii заполнить выпадающий на выбор другого

У меня есть раскрывающийся список, который я хочу заполнить, когда выбран элемент в другом раскрывающемся списке. Оба раскрывающихся списка привязаны к данным / модели, передаваемым из контроллера. и первый выпадающий список заполняется из БД путем вызова функции в модели. Вот форма,

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());

Вот действие пользователя /getunits, вызываемое Ajax.

$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);
    }

Я получаю сообщение об ошибке "Неопределенный индекс: superunit" при выборе первого раскрывающегося списка. Кроме того, вы можете заметить, что я использую form->dropDownListRow для первого раскрывающегося списка при использовании CHtml::dropDownList для второго. Это потому, что я понятия не имею о том, как точно убедиться, что выпадающий список правильно заполнен ajax, а также правильно привязан к модели.

1 ответ

Решение

Ты используешь $form->dropDownListRow вот почему вы получите $_POST['MyModelName']['superunit'] на вашей стороне сервера

Измените свой код как

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

куда MyModelName это модель, которую вы используете)

Или как

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

Для других - эта вики может помочь.

Другие вопросы по тегам