我正在处理注册表单,我在一些网站上有2个用户注册步骤,因此第1步是创建操作,第2步是配置文件控制器上的更新操作。
所以我的问题是如何在验证错误中保留所选国家和城市,但它已经存在了?!检查图像
视图:
<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>
答案 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>
虽然这可能对您的代码不起作用,但我希望您明白这一点。如果您可以发布您的验证码,则无法正确修改,因此它适用于您。