我知道大多数人可能都很熟悉这个问题,但请允许我问一下,因为本论坛和YII论坛中相关问题的大多数答案都没有给出满意的答案。我的两个依赖的下降工作正常,第二个根据第一个选择填充。所有值都来自数据库。 现在我的问题是,即使选择了一个值并且似乎没有验证,第二个下拉列表仍然会返回一个空值。我在论坛上搜索过,但似乎都没有得到很好的解决。 Pliz帮助我。这对我来说非常重要。
EDITED: 对不起,我已经假设你已经知道了,但这里是我的代码: _form.php这个
<div class="row">
<?php echo $form->labelEx($users,'country_id'); ?>
<?php echo $form->dropDownList($users,'country_id',CHtml::listData(Country::model()->findAll(
array('order' => 'country')),'country_id','country'),
array(
'class'=>'form-control',
'prompt'=>'Choose Your Country',
'ajax'=>array(
'type'=>'POST',
'url' => CController::createUrl('users/findcity'),
'data'=> array('country_id'=>'js:this.value'),
'update'=>'#city_id'))
);?>
<?php echo $form->error($users,'country_id'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($address,'city_id'); ?>
<?php echo CHtml::dropDownList('city_id','', array(),
array('prompt'=>'Choose Your City','class'=>'form-control')); ?>
<?php echo $form->error($address,'city_id'); ?>
</div>
这是我的控制器功能,可以找到与所选国家/地区相关联的城市
public function actionFindcity()
{
$data = City::model()->findAll('country_id=:country_id',
array(':country_id'=>$_POST['country_id']));
$data=CHtml::listData($data,'city_id','name');
echo "<option value=''>City</option>";
foreach($data as $value=>$name)
echo CHtml::tag('option', array('value'=>$value),CHtml::encode($name),true);
}
我尝试了很多方法,但我似乎无法弄清问题在哪里,因为我怀疑这些代码行,因为我似乎无法找到响应此代码的模型:
<?php echo CHtml::dropDownList('city_id','', array(),
array('prompt'=>'Choose Your City','class'=>'form-control')); ?>
感谢您的帮助。
答案 0 :(得分:0)
她的解决方案
my _Form
<?php if(isset($_POST['your_Model']['country']))
{$countryid = $_POST['your_Model']['country'];}
else {$countryid = ''; }?>
<?php echo $form->dropDownList($model,'country',
CHtml::listData(Country::model()->findAll(), 'country_id', 'country'),
array(
'ajax' => array(
'type'=>'POST', //request type
'url'=>CController::createUrl('your_Model/dynamicStates'), //url to call.
'update'=>'#'.CHtml::activeId($model,'state'),
array('class'=>'ajaxlink'),
),'prompt'=>'--select--',)
); ?>
</td>
<td>
<?php echo $form->labelEx($model,'state'); ?>
</td>
<td>
<?php $listStates = array();
if(!empty($countryid))
{
$listStates = $this->getStatesList($countryid);
}
if ($model->state != '')
{
$listStates = $this->getStatesList($model->country);
}
?>
<?php echo $form->dropDownList($model,'state',$listStates, array('empty'=>'--select--')); ?>
并在控制器或模型中
public function actionDynamicStates(){
$data = $this->getStatesList($_POST['your_Model']['country']);
foreach($data as $value=>$name)
{
echo CHtml::tag('option',
array('value'=>$value),CHtml::encode($name),true);
}
}
public function getStatesList($country_id) {
$data=State::model()->findAll('country_id=:id',
array(':id'=>(int)$country_id));
return CHtml::listData($data,'state_id','state');
}
希望如果你想让我解释你,这会帮助你