Передать данные на следующую страницу в yii2

Я работаю над проектом в Yii2, требование состоит в том, что когда пользователь щелкает строку в gridview, он должен открыть новый контроллер, называемый регистрацией, и отобразить всех зарегистрированных пользователей для этой конкретной строки.

Я запутался, лучше использовать actioncolumn и создать новую кнопку или использовать rowopions

В любом случае, когда я использую rowoptions вот так

        [
            'class' => 'yii\grid\ActionColumn',
            'template' => '{index} {view} {update} {delete} ',
            'buttons' => [

                'index' => function ($url,$model) {

                    return Html::a('<span class="glyphicon glyphicon-user"></span>', $url);

                },
            ]

        ],

Когда я использую этот код с javascript

<?php
        $this->registerJs("
            $('tbody td').css('cursor', 'pointer');
            $('tbody td').click(function (e) {
                var id = $(this).closest('tr').data('id');
            if (e.target == this)
                location.href = '" . Url::to(['checkin/index' ]) . "?id=' + id;
            });
        ");
    ?>

Он дает идентификатор события щелчка строки, но он не перенаправляет на страницу «checkin/index», он обновляется в том же возрасте, а идентификатор строки прикрепляется в конце URL-адреса.

Но когда я использую этот скрипт

 <?php
    $this->registerJs("

        $('td').click(function (e) {
            var id = $(this).closest('tr').data('id');
            if(e.target == this)
                location.href = '" . Url::to(['checkin/index']) . "?id=' + id;
        });

    ");
?>

Он перенаправляет на checkin/index страницу нормально, но URL-адрес не получает id его отображения checkin/index/id=undefined

Я хочу передать идентификатор контроллеру checkinSearch и отображать только данные выбранной строки для использования.


person Mike Ross    schedule 04.09.2015    source источник


Ответы (1)


Вы можете попробовать это.

<?= GridView::widget([
    'dataProvider' => $dataProvider,
    'filterModel' => $searchModel,
    'rowOptions' => function ($model, $key, $index, $grid) {
                        return ['id' => $model['student_id'], 'class' => 'action-tr', 'data-link' => urldecode(Url::toRoute(['/student/student-transaction/update', 'id' => $model['student_id']]))];
    },
    'columns' => [
        ['class' => 'yii\grid\SerialColumn'],

        [
          'attribute' => 'student_roll_no',
          'value' => 'rel_Stud_Info.student_roll_no',
        ],
        [
          'class' => 'yii\grid\ActionColumn',
          'template' => '{update} {delete}',
          'contentOptions' => ['class'=>'action-td'],       
        ],
    ],
]); ?>

И зарегистрируйтесь ниже Js, чтобы предотвратить ActionColumn перенаправление щелчка строки.

<?php
    $this->registerJs("
    $(document).ready(function(){
        $('.action-tr').on('click', 'td:not(.action-td)', function(){

            //get the link from data attribute
            var the_link = $(this).parent().attr('data-link');

            //do we have a valid link      
            if (the_link == '' || typeof the_link === 'undefined') {
            //do nothing for now
            }
            else {
            //open the page
            window.location = the_link;
            }
        });
    });
"); ?>

Этот пример является частью реального проекта и работает для меня. Попытайся....

person GAMITG    schedule 04.09.2015
comment
Если вы не зарегистрируетесь выше js, поэтому, когда вы нажимаете ActionColumn, вы перенаправляетесь на URL-адрес строки вместо ссылки кнопки ActionColumn. - person GAMITG; 04.09.2015
comment
похоже, у него та же проблема.. он обновляется на той же странице и прикрепляет идентификатор данных, по которому щелкнули, с URL-адресом... это то, что я сделал, чтобы решить проблему. 'onclick' =>'location.href="'.Url::to(['checkin/index']).'?id="+(this.id);' добавьте этот код в оператор return rowoptioins, и он решил проблему на данный момент, но я хочу сделать это, используя вместо строки ActionColumn.. спасибо в любом случае - person Mike Ross; 04.09.2015