2013-09-21 6 views
0

У меня есть раскрывающийся список, который я хочу заполнить, когда выбран элемент в другом выпадающем списке. Оба выпадающих привязаны к данным/модели, переданным с контроллера. и первое выпадающее меню заполняется из БД, вызывая функцию в модели. Heres 'форма,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 и также правильно привязано к модели.

ответ

3

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

Изменение вы закодировать как

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

Где MyModelName является модель, которая используется)

Или как

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

Для других - this wiki может помочь.

+0

Спасибо. Это сработало. – redGREENblue

+0

Извините, что беспокою вас снова. Этот код отлично подходит для создания. Действие обновления не работает. Я продолжаю получать ошибку 'get_class() ожидает, что параметр 1 будет объектом, массив задан. Если я удаляю выпадающие списки, ошибок нет. В чем может быть проблема? – redGREENblue

+0

1. Убедитесь, что у вас есть последний Yii (возьмите его из github). 2. Попробуйте отладить путем переключения (включения/выключения) второго выпадающего списка. 3. Попробуйте выполнить отладку, следуя трассировке стека, предоставленной Yii (вставьте код рамки). 4. Попробуйте предоставить скриншот трассировки стека Yii. – Pave

Смежные вопросы