jqGrid не вызывает действие контроллера asp.net mvc - PullRequest
0 голосов
/ 10 мая 2018

в моем asp.net mvc, используя jqGrid для привязки данных. код, как показано ниже. Но это не загрузка данных и не выполнение действия контроллера при отладке. в чем проблема в приведенном ниже коде. Оповещение показывает URL, но не воздействует на действие контроллера. Помощь была бы признательна. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация

@model Stud.Areas.Admin.Models.AdminVM

@using Stud.Common.Extension;



<h2>MD Index</h2>


<br />
<div style="margin-top: -45px">


        <div class="col-md-12">
            <div id="gridDivmsg" style="clear: both;">
                <table id="jqGrid" ></table>
                <div id="jqGridPagermsg"></div>
            </div>
        </div>



</div>

@section scripts{

<link href="~/Content/themes/base/jquery-ui.css" rel="stylesheet" />
<link href="~/Content/jquery.jqGrid/ui.jqgrid.css" rel="stylesheet" />
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery-ui-1.12.1.min.js"></script>
<script src="~/Scripts/i18n/grid.locale-en.js"></script>
<script src="~/Scripts/jquery.jqGrid.min.js"></script>
@*<script src="~/Scripts/MDScript.js"></script>*@


    @Html.jqGridSetup()

    <script>
        $(document).ready(function () {
                var $grid = $('#jqGrid');
            var $gridDiv = $('#gridDivmsg');

            function reloadGridmsg() {

                var urlName = '@Url.Action("GetMessagesForGrid", "MD")';

                $grid.jqGrid("setGridParam", { url: urlName, datatype: "json", page: 1 }).trigger("reloadGridmsg");
                $gridDiv.show();
                alert(urlName);
                }

            $grid.jqGrid({
                editurl: '@Url.Action("EditRowMessage")',
                datatype: 'local',
                styleUI: 'Bootstrap',
                colNames: ['Id', 'Message Key', 'Message Value', 'Message Status'],
                colModel: [
                    { name: 'Id', index: 'Id', width: 1, hidden: true, editable: true, edittype: 'text', editrules: { required: true } },
                    { name: 'MessageKey', index: 'MessageKey', width: 1, editable: true, edittype: 'text', editrules: { required: true } },
                    { name: 'MessageValue', index: 'MessageValue', width: 1, editable: true, edittype: 'textarea', editrules: { required: true } },
                    { name: 'MessageStatus', index: 'MessageStatus', width: 1, editable: true, edittype: 'select', editoptions: { value: { 'Active': 'Active', 'InActive': 'InActive' }, defaultValue: 'Active' }, editrules: { required: true } }
                ],
                responsive: true,
                loadonce: true,
                pager: $('#jqGridPagermsg'),
                height: 'auto',
                sortname: 'Id',
                rowNum: 20,
                autowidth: true,
                viewrecords: true,
                altRows: true,
                altclass: 'jqGridAltRow'
            });

            $grid.jqGrid('filterToolbar', { autosearch: true, searchOnEnter: false, defaultSearch: "cn" });
            $grid.jqGrid('navGrid', "#jqGridPagermsg", {
                edit: true,
                add: true,
                del: false,
                search: false,
                refresh: false,
                view: false,
                position: "left",
                cloneToTop: false
            },
            {
                editCaption: "Edit User",
                recreateForm: true,
                checkOnUpdate: true,
                checkOnSubmit: true,
                closeAfterEdit: true,
                errorTextFormat: function (data) {
                    return 'Error: ' + data.responseText
                },
                afterComplete: function () {
                    reloadGridmsg();
                }
            },
            {
                addCaption: "Add User",
                closeAfterAdd: true,
                recreateForm: true,
                errorTextFormat: function (data) {
                    return 'Error: ' + data.responseText
                },
                afterComplete: function () {
                    reloadGridmsg();
                }
            },
            {
                errorTextFormat: function (data) {
                    return 'Error: ' + data.responseText
                }
            });

            reloadGridmsg();

        });


    </script>

}

Метод действия контроллера, как показано ниже.

public ActionResult GetMessagesForGrid(StudVM model)
        {
            if (!IsAuthorized(Enums.Rights.Admin))
                return View("NoAccess");

            var gridData = _activityService.GetVCRMessagesList();

            int totalRecords = gridData.Count();
            int totalPages = (int)Math.Ceiling((float)totalRecords / (float)model.rows);
            var jsonData = new
            {
                total = totalPages,
                page = model.page,
                records = totalRecords,
                rows = gridData.Select(d => new { Id = d.Id, cell = new object[] {  d.Id, d.MessageKey, d.MessageValue, d.MessageStatus } }).ToArray()
            };
            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }

пока я не получу пустую сетку, как показано ниже

введите описание изображения здесь

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Вам нужно, чтобы метод действия следовал некоторой сигнатуре метода следующим образом

public ActionResult GetMessagesForGrid(string sidx, string sord, int page, int rows, bool _search, string filters)
        {
            if (!IsAuthorized(Enums.Rights.Admin))
                return View("NoAccess");

            var gridData = _activityService.GetVCRMessagesList();

            int totalRecords = gridData.Count();
            int totalPages = (int)Math.Ceiling((float)totalRecords / rows);
            var jsonData = new
            {
                total = totalPages,
                page = page,
                records = totalRecords,
                rows = gridData.Select(d => new { Id = d.Id, cell = new object[] {  d.Id, d.MessageKey, d.MessageValue, d.MessageStatus } }).ToArray()
            };
            return Json(jsonData, JsonRequestBehavior.AllowGet);
        }

Я также не вижу причины, по которой вы не задаете тип данных сетки для json и не указываете URL-адрес в начале, когда определяете сетку вместо создания клиентской стороны сетки, а затем перезагружаете ее

 $grid.jqGrid({
                editurl: '@Url.Action("EditRowMessage")',
                datatype: 'json',
                 url: '@Url.Action("GetMessagesForGrid", "MD")'
                styleUI: 'Bootstrap',
                colNames: ['Id', 'Message Key', 'Message Value', 'Message Status'],
                colModel: [
                    { name: 'Id', index: 'Id', width: 1, hidden: true, editable: true, edittype: 'text', editrules: { required: true } },
                    { name: 'MessageKey', index: 'MessageKey', width: 1, editable: true, edittype: 'text', editrules: { required: true } },
                    { name: 'MessageValue', index: 'MessageValue', width: 1, editable: true, edittype: 'textarea', editrules: { required: true } },
                    { name: 'MessageStatus', index: 'MessageStatus', width: 1, editable: true, edittype: 'select', editoptions: { value: { 'Active': 'Active', 'InActive': 'InActive' }, defaultValue: 'Active' }, editrules: { required: true } }
                ],
                responsive: true,
                // loadonce: true,
                pager: $('#jqGridPagermsg'),
                height: 'auto',
                sortname: 'Id',
                rowNum: 20,
                autowidth: true,
                viewrecords: true,
                altRows: true,
                altclass: 'jqGridAltRow'
            });

если вам нужно знать, как настроить этот метод действия на Это решение

0 голосов
/ 10 мая 2018

Ваш контроллер имеет параметр model типа StudVM, который не передается в вашем URL-адресе JavaScript. Попробуйте передать параметр типа StudVM. Это может решить вашу проблему.

$grid.jqGrid("setGridParam", { url: urlName,postData: { model:<your model>}, datatype: "json", page: 1 }).trigger("reloadGridmsg");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...