我有一个带有checkboxcolumn和google-map(2amigos)的gridview视图。用户通过选择gridview中的相应项目来选择要在地图中显示的机器。 html按钮将选定的密钥提交给控制器。遵循控制器代码(dataProvider通过post-request更新):
plusOne()
这是html-button的js脚本:
//some code before render
$dataProvider = new ActiveDataProvider(['query'=>$query, 'pagination'=>false]);
return $this->render('locating', [
'model' => $model,
'searchModel' => $searchModel,
'dataProvider1' => $dataProvider1,
'dataProvider' => $dataProvider,
]);
}
问题是,对于post请求,php-render命令的结果被写为html-string到post-response,但是视图没有被重新渲染。如果我使用activeForm而不是gridview(选择机器)和提交按钮,页面会按原样重新渲染(但这种方式对我不起作用,因为我需要gridview过滤和排序)。我可以做什么,使用后请求重新呈现地图(或视图)?
答案 0 :(得分:1)
尝试使用renderAjax方法在通过ajax请求时呈现视图。我假设您使用actionLocating
呈现页面获取请求和ajax的视图。因此,在控制器中调用 render 之前,请检查这是否是ajax请求:
$renderMethod = Yii::$app->request->isAjax ? 'renderAjax' : 'render';
return $this->$renderMethod('locating', $viewParams);
答案 1 :(得分:0)
sigma
答案 2 :(得分:0)
你可以在你的基本控制器上创建一些功能,以确保它是否呈现为ajax,代码看起来像这样。
protected function renderIsAjax($view, $params = [])
{
if (Yii::$app->request->isAjax) {
return $this->renderAjax($view, $params);
} else {
return $this->render($view, $params);
}
然后在你的控制器中调用该方法
return $this->renderIsAjax('locating', [
'model' => $model,
'searchModel' => $searchModel,
'dataProvider1' => $dataProvider1,
'dataProvider' => $dataProvider,
]);