客户端验证不适用于yii中的模型窗口/ ajax-loaded-form

时间:2014-04-16 17:46:52

标签: ajax yii popupwindow

我在主要版面中使用 Yii用户扩展程序我有一个注册链接,这是所有 Cmenu

查看/主要布局

  echo CHtml::link('Signup','#',array('id'=>'regi'));


  $("#regi").click(function(){


    $.ajax({
        type:'GET',
url:'<?php echo Yii::app()->request->baseUrl;?>/index.php/user/registration',
        success:function(res){
            $("#dispdata").show();
            $("#dispdata").html(res);
        }
         });
             });



  <div id="dispdata"><div>

** yii用户扩展名**可以完美呈现,如果表单值有效,甚至可以正确提交。

但如果值不正确且为空,则会重定向到url ... / user / registration

这不是我的需要。我需要指导我该做什么,如果值不正确或空白,它不应重定向并在模型窗口中显示错误。

我确实尝试过但几乎无法获得满意的结果

如果我放置以下模型窗口本身并不显示我该做什么

我放置

模块registrationController

    ....//some code here  (**in yiiuser register controller**)
    if ($model->save()) {
        echo CJSON::encode(array(
                        'status'=>'success',
                        ));

        }

     ....//some code here...

          Yii::app()->clientScript->scriptMap['jquery.js'] = false;
          $this->renderPartial('registration',array('model'=>$model,),false,true);
模块视图注册中的

       <?php echo   CHtml::ajaxSubmitButton(Yii::t('registration'),CHtml::normalizeUrl(array('user/registration','render'=>false)),array('dataType'=>'json',
        'success'=>'function(data) {
            if(data != null && data.status == "success") {
                $("#registration-form").append(data.data);

            }

        }')); ?>

任何人都可以指导我工作过去10天十天尝试过每个钩子或骗子方法但是无法获得结果......如何能够完成客户端验证的模型窗口.....请指导我或让我知道更好的事情可以做到


注册模型中的

规则

   if (!(isset($_POST['ajax']) && $_POST['ajax']==='registration-form')) {
        array_push($rules,array('verifyCode', 'captcha',      'allowEmpty'=>!UserModule::doCaptcha('registration')));

同样没有所需字段的属性

已更改为

  array_push($rules,array('verifyCode', 'captcha','message' => UserModule::t("captcha cannot be blank.")));

并将验证码添加到必填字段

尚未奏效,

1 个答案:

答案 0 :(得分:1)

简单的方法是在Ajax操作中使用render方法并为此操作创建空布局。如果这样做,验证脚本将包含在服务器响应中。您还需要使用Yii::app()->clientScript->scriptMap排除jquery.js和其他脚本,并始终将它们包含在主布局中。