即使在验证之后,yii中的从属下拉列表也会返回空字符串

时间:2014-03-02 19:55:35

标签: php yii

我知道大多数人可能都很熟悉这个问题,但请允许我问一下,因为本论坛和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')); ?>

感谢您的帮助。

1 个答案:

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

希望如果你想让我解释你,这会帮助你