我有问题。
我需要打开一个模式以另一个表的形式在表中插入数据。
我可以使用Ajax在控制器中使用actionCreate在create view的视图中打开模态,但是当我随意保存模态时,默认情况下,控制器会将我重定向到action视图,如果我改变了,它会在当前标签中打开完整视图。
该问题通过将视图重定向到该模态应该处于if条件的视图而暂时解决,但是当我测试插入无效数据时,该视图将全屏显示并显示消息错误(在ajax render中)。
此外,数据始终会保存。
我知道有一种无需更改视图即可在模态中呈现的方法,但是我是新手,对使用模态没有任何经验。
请需要您的帮助。
有我的查看文件:
<?php
use yii\helpers\Html;
use yii\helpers\ArrayHelper;
use yii\widgets\ActiveForm;
use yii\bootstrap\Modal;
use yii\helpers\Url;
use app\models\Catalogo;
/* @var $this yii\web\View */
/* @var $model app\models\Articulo */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="articulo-form">
<?php $form = ActiveForm::begin(['id'=>'articuloCreate']); ?>
<?= $form->field($model, 'ID_CATALOGO')->dropDownList(
ArrayHelper::map(Catalogo::find()->all(),'ID_CATALOGO','NOMBRE_CATALOGO'),
[
'style'=>'width:500px',
'prompt'=>'Seleccionar catálogo',
]); ?>
<?= Html::button('Agregar catálogo', [
'value' => Url::to(['catalogo/create']),
'class' => 'btn btn-primary',
'id' => 'BtnModalCatalogo',
'data-toggle'=> 'modal',
'data-target'=> '#catalogo',
]) ?>
<?php ActiveForm::end(); ?>
同一视图中的模态:
<?php
Modal::begin([
'header' => 'Crear catálogo',
'id' => 'catalogo',
'size' => 'modal-md',
]);
echo "<div id='modalContent'>BtnModalCatalogo</div>";
Modal::end();
?>
还有更多的代码,但是我认为毫无意义。
这是我的JS:
$('#BtnModalCatalogo').click(function(e){
e.preventDefault();
$('#catalogo').modal('show')
.find('#modalContent')
.load($(this).attr('value'));
return false;
});
这是在控制器中创建的动作:
public function actionCreate()
{
$model = new Catalogo();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->ID_CATALOGO]);
}
if(Yii::$app->request->isAjax){
return $this->renderAjax('create', [
'model' => $model,
]);
}
return $this->render('create', [
'model' => $model,
]);
}
以防万一,这是操作视图:
public function actionView($id)
{
return $this->render('view', [
'model' => $this->findModel($id),
]);
}
首先,谢谢。
在开始的时候,我希望控制器应该在模式中加载其他视图,但不是那样。
答案 0 :(得分:0)
此操作仅在通过ajax调用时响应,并且仅在保存模型时才会重定向。
public function actionCreate()
{
$model = new Catalogo();
if ($model->load(Yii::$app->request->post())) {
if($model->save()) return $this->redirect(['view', 'id' => $model->ID_CATALOGO]);
}
return $this->renderAjax('create', [
'model' => $model,
]);
}