我有一个以模态绑定的下拉列表。使用以下代码:
public function getYears()
{
for ($i=date('Y');$i>=2012;$i--)
{
$years["{$i}"]="{$i}";
}
return $years;
}
我的观点是:
<div class="row">
<?php echo $form->labelEx($model,'year'); ?>
<?php echo CHtml::activedropDownList($model,'years',$model->getYears(),array('class'=>'myClass')); ?>
<?php echo $form->error($model,'year'); ?>
<?php echo $form->labelEx($model,'name'); ?>
<?php
$this->widget('zii.widgets.jui.CJuiAutoComplete', array(
'name'=>'name',
'source'=>$this->createUrl('reports/autocompleteTest'),
'options'=>array(
'delay'=>300,
'minLength'=>2,
'showAnim'=>'fold',
),
));
?>
<?php echo $form->error($model,'name'); ?>
<?php echo $form->labelEx($model,'Status'); ?>
<?php echo $form->dropDownList($model,'is_active',array("1"=>"Active","0"=>"InActive")); ?>
<?php echo $form->error($model,'Status'); ?>
</div>
<div class="summary_btn buttons"> <?php echo CHtml::submitButton('Search'); ?> </div>
<?php $this->endWidget(); ?>
现在当我点击按钮Search
时,我的页面正在回发。它重新绑定了下拉列表。
我不知道如何在点击按钮后在下拉列表中保留所选值。
答案 0 :(得分:2)
在行动中:
$model->setAttributes($_POST[get_class($model)]);
在模型中:
function rules(){
return array(
//other rules
array('years', 'safe'), //or any other validation
)
}
答案 1 :(得分:1)
您应该setAttributes
来自$_POST
的模型,因此Yii会重新分配模型值以形成组件,就像保存模型一样,但没有保存:
public function someAction()
{
// load model somewhere
$model = $this->_loadModel();
if($_POST['modelName'])
{
$model->setAttributes($_POST['modelName']);
}
$this->render('someView', ['model' => $model]);
}
修改强>
发表评论后,我注意到您的模型采用getYears
方法,Yii用作属性years
的getter,为explained in getters and setters tutorial。您应该将其重命名为getYearRanges
。并确保模型中包含years
属性以保留当前years
值,并将规则设为in HarryFink answer。