Yii:验证错误:需要保留所选国家和城市

时间:2012-09-08 15:32:03

标签: php yii

我正在处理注册表单,我在一些网站上有2个用户注册步骤,因此第1步是创建操作,第2步是配置文件控制器上的更新操作。

所以我的问题是如何在验证错误中保留所选国家和城市,但它已经存在了?!检查图像

Check this

视图:

<div class="row">


        <?php echo $form->labelEx($model,'countryId'); ?>
        <?php echo $form->dropDownList($model, 'countryId',
                CHtml::listData(SysCountry::model()->findAll(), 'id', 'name'),
                array(
                    'empty'=>'Select country',
                    'ajax' => array(
                    'type'=>'POST', //request type
                    'url'=>CController::createUrl('profile/dynamiccity'), //url to call.
                    //Style: CController::createUrl('currentController/methodToCall')
                    'update'=>'#Profile_cityId', //selector to update
                    //'data'=>'js:javascript statement' 
                    //leave out the data key to pass all form values through
                    )));

        ?>
        <?php echo $form->error($model,'countryId'); ?> 
</div>


<div class="row">
        <?php echo $form->labelEx($model,'cityId'); ?>
        <?php echo $form->dropDownList($model, 'cityId', array('empty'=>'Please select country first')
        ); ?>
        <?php echo $form->error($model,'cityId'); ?> 
    </div>

2 个答案:

答案 0 :(得分:1)

选中此项,以更新您需要使用的第二个下拉列表

'update'=>'#'.CHtml::activeId($model,'tracanton'),

echo CActiveForm::dropDownList
                     (
                        $model,'traprovincia',
                        CHtml::listData
                        ( 
                            CatUbicacionGeografica::model()->findAll('cat_ubigeo_nivel=? ORDER BY cat_ubigeo_descripcion', array('2') ), 
                            'cat_ubigeo_codigo', 'cat_ubigeo_descripcion'
                        ), 
                         array(
                            'ajax'=>array(
                                'type' => 'POST',
                                'url' => CController::createUrl('tramite/updatecanton'),
                                'data'=>array('padre'=>'js:this.value'), 
                                'update'=>'#'.CHtml::activeId($model,'tracanton'),
                                ),
                             'prompt' => '( Seleccione Provincia )',
                             'style' => "width: 300px;",
                            // 'onchange'=>'js:$("#tracanton").focus()',
                        )    
                     );

答案 1 :(得分:0)

是javascript还是PHP验证?如果它的前者使用JS来获取下拉框的值然后重新填充(ikll会发布一些代码,如果它的话)。如果它的PHP然后在您的下拉列表中执行以下操作

<select>

//-- If 'save' has been entered and validation has been caught
if (isset($_POST/GET['country'])) {

  echo '<option value=". $_POST/GET['country'] . '" selected="selected">' . $_POST/GET['country'] . '</option>';

} else {

   //-- if validation hasnt been actioned

}

</select>

虽然这可能对您的代码不起作用,但我希望您明白这一点。如果您可以发布您的验证码,则无法正确修改,因此它适用于您。