2016-01-31 4 views
0

renderPartial clientSide validation не работает. Я хочу сделать часть формы с помощью ajax. Напр .: _form.phpYii2 renderPartial clientSide validation не работает

$form = ActiveForm::begin([ 
    'options' => [ 
     'enableAjaxValidation' => true, 
    ] 
]); 
$form->field($model, 'category_id')->dropDownList($category, [ 
'onchange'=>' 
    $.get("'.Url::toRoute('/controller/params').'", { id: $(this).val() }) 
      .done(function(data) { 
        $("#offers-param-content").html(data); 
      } 
    );' 
]); 

Controller.php

public function actionParams($id) 
{ 
    $model = new Param(); 
    $params = EavAttribute::find()->where(['category_id'=>$id])->all(); 
    $this->renderPartial('_params', ['model' => $model, 'params' => $params]; 
} 

_params.php

foreach($params as $item){ 
    echo Html::activeTextInput('text', $model, $item->name); 
} 
+0

вы пробовали uisng [renderAjax() ] (http://www.yiiframework.com/doc-2.0/yii-web-view.html#renderAjax%28%29-detail)? –

+0

@InsaneSkull Да – user3185208

ответ

0

В вашей Controller.php вам нужно установить layout в false и die Казни

public function actionParams($id) 
{ 
    $this->layout = false; 
    $model = new Param(); 
    $params = EavAttribute::find()->where(['category_id'=>$id])->all(); 
    $this->renderPartial('_params', ['model' => $model, 'params' => $params]; 
    die; 
} 
0

Вы не возвращаете какую-либо ошибки проверки с контроллера на ваш взгляд. В архив с использованием

yii \ widgets \ ActiveForm :: validate ($ yourModel);

Если вы не используете ActiveForm вы можете возвращать ошибки при

$model->getErrors();//will return errors from $model->validate() 

С вашей выдержке попробовать этот

public function actionParams($id) { 
     $model = new Param(); 
     if ($model->load(Yii::$app->request->post())) { 
      if (Yii::$app->request->isAjax) { 
       Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; 
       return ActiveForm::validate($model); /* Validation error messages are returned by this static function */ 
      } 
      $params = EavAttribute::find()->where(['category_id' => $id])->all(); 
      $this->renderPartial('_params', ['model' => $model, 'params' => $params]); 
     } 
    } 
2

Если вы хотите, чтобы включить проверку клиента, а затем установить это свойство верно.

$form = ActiveForm::begin([ 
    'options' => [ 
     'enableAjaxValidation' => true, 
    'enableClientValidation'=>true 

    ] 
]); 

И использовать renderAjax() функцию вместо renderPartial() будет закачивать в результате рендеринга с/CSS скрипты и файлы JS, которые зарегистрированы с целью

Смежные вопросы