Мне кажется, что вам нужно взглянуть на переменные $ _POST, чтобы увидеть, какой зависимый выпадающий список был выбран, и предварительно отрендерить его, когда проверка формы завершится неудачно, чтобы сработали ошибки проверки Yii по умолчанию.Используя эту ссылку в качестве примера:
Сначала выполните рефакторинг части метода actionDynamiccities()
в отдельный публичный (бездействующий) метод в вашем контроллере:
public function getCitiesList($country_id) {
$data=Location::model()->findAll('parent_id=:parent_id',
array(':parent_id'=>(int) $country_id));
return CHtml::listData($data,'id','name');
}
Затем исправьте измененное действие AJAX следующим образом:
public function actionDynamiccities()
{
$data = $this->getCitiesList($_POST['country_id']);
foreach($data as $value=>$name)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($name),true);
}
}
Затем в файле представления _form.php, в div #city_id, где второй выпадающий список будет AJAXed первым, добавьте немногоФрагмент PHP, подобный следующему:
<div id="city_id">
<?php if(isset($_POST['city_id'])): ?>
<?php foreach($this->getCitiesList($_POST['country_id']) as $value=>$name): ?>
<?php echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true); ?>
<?php endforeach; ?>
<?php endif; ?>
</div>
Таким образом, если вы уже отправили форму и установлено значение $ _POST ['country_id'], зависимый раскрывающийся список уже отображается и в нем должны отображаться соответствующие ошибки проверки.,
Если пользователь выбирает другую страну, раскрывающийся список городов следует заменить, как обычно.
Я не тестировал этот код, но он должен работать в принципе.Удачи!