yii中的依赖下拉列表即使经过验证也会返回空字符串



我知道这个问题可能对你们大多数人来说都很熟悉,但请允许我提问,因为在这个论坛和YII论坛中,大多数相关问题的答案都没有得到满意的答案。我的两个依赖下拉列表运行良好,第二个下拉列表根据第一个下拉列表的选择进行填充。所有值都来自数据库。现在我的问题是,即使在选择了一个值并且似乎没有经过验证之后,第二个下拉列表仍然会返回一个空值。我搜索了论坛,但似乎没有一个得到很好的处理。普林斯帮我。这对我来说非常重要。

编辑时间:对不起,我以为这是你已经知道的事情,但这是我的代码:_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')); ?>

谢谢你的帮助。

她的解决方案

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

希望这能帮助你如果你想我可以解释你

最新更新