Yii - 使用renderPartial进行表单验证不起作用(processOutput = true)

时间:2014-01-14 15:57:22

标签: php ajax validation yii

我通过ajax和renderPartial呈现表单。 我注意到表单不再有效。有些搜索让我将processOutput设置为true,但验证仍然没有执行。这似乎是大多数人的答案。

我的行动:

public function actionView($id){
    $model=$this->loadModel($id);
    $this->performAjaxValidation($model);
    if(isset($_POST[$this->searchModel]))
    {
        $model->attributes=$_POST[$this->searchModel];
        if($model->save())
            $this->redirect(array('/company/'.$model->company->company_id));
    }
    $this->renderPartial('view',array('model'=>$model), false, true);
}

并形成:

<div class="form">

<?php $form=$this->beginWidget('CActiveForm', array(
    'id'=>'person-form',
    'enableAjaxValidation'=>true,
    'clientOptions' => array('validateOnSubmit'=>true),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>

    <?php echo $form->errorSummary($model); ?>

    <?php echo $form->labelEx($model,'firstname'); ?>
    <?php echo $form->textField($model,'firstname',array('size'=>30,'maxlength'=>255)); ?>
    <?php echo $form->error($model,'firstname'); ?>
    <?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save'); ?>
<?php $this->endWidget(); ?>

最后加载表单的代码:

<div class="form ajax-load hidden overlay"></div>
<script>
$(document).ready(function(){
    $('.view').click(function(e){
        e.preventDefault();
        $('.ajax-load').html('<img src="/images/spinner/search.gif"/>').show();
        $('.ajax-load').load($(this).attr('href'));
    });
});
</script>

知道我可能做错了吗?

2 个答案:

答案 0 :(得分:1)

据我所知, processOutput renderPartial 加载javascript,如果你用js加载这个渲染的块,这个ofc对你没有帮助 via ajax

我觉得这就是发生的事情:

  • Controller通过 renderPartial 呈现视图,因为 processOutput 设置为true而添加了javascript
  • 然后你的另一个视图或控制器或加载你的任何形式只是用js抓住这个渲染的块,当然不会在这个块中触发javascript

所以你有两个选择:

  1. 禁用客户端验证,因为您已经拥有ajax表单并且仅依赖于提交验证
  2. 在加载表单
  3. 后手动重新初始化所有表单验证脚本

答案 1 :(得分:0)

这实际上是因为我在通过ajax加载新表单之前已经在页面上有一个重复的表单。一个用于新记录,一个用于通过ajax更新记录。

删除重复的表单后,验证工作正常。

希望如果他们遇到同样的问题,这可能有所帮助。