Параметр jqGrid 'url' вызывает ошибки на страницах в более глубоких URL - PullRequest
1 голос
/ 03 августа 2009

Я пытаюсь развернуть сайт ASP.NET MVC на сервере Windows 2003, IIS 6.0 с установленной платформой 3.5 (но не ASP.NET MVC - он просто находится в папке bin). Сайт использует jqGrid, но в некоторых случаях на сервере развертывания происходит сбой сетки.

Главная страница веб-сайта находится по адресу /Views/Shared/Site.Master. Он имеет тег script для включения JavaScript для инициализации и загрузки jqGrid.

Я обнаружил, что при развертывании ни JavaScript, ни "/", ни ASP "~" не приводили к абсолютным путям к файлам скриптов. Мне нужно было добавить код, чтобы убедиться, что путь указан полностью:

<script type="text/javascript" src=<%= VirtualPathUtility.ToAbsolute("~/Scripts/searchControls.js") %> ></script>

URL-адрес в функции инициализации jqGrid включает путь к методу контроллера для получения начальных данных, например:

jQuery("#searchResultList").jqGrid({
        url: './Report.mvc/GetResultsL2E/',
        datatype: 'json',
        mtype: 'GET',
        colNames: ['', 'ID', 'Title', 'Post_Date', 'Start_Date', 'End_Date', 'Summary', 'Categories', 'Affected Places'],
    colModel: [
      { name: 'act', index: 'act', width: 75, sortable: false },
      { name: 'ID', index: 'ID', width: 40, align: 'left', hidden: true },
      { name: 'Title', index: 'Title', width: 150, align: 'left' },
      { name: 'Post_Date', index: 'Post_Date', width: 80, align: 'left' }, //, formatter: 'date' },
      { name: 'Start_Date', index: 'Start_Date', width: 80, align: 'left' }, //, formatter: 'date' },
      { name: 'End_Date', index: 'End_Date', width: 80, align: 'left' }, //, formatter: 'date' },
      { name: 'Summary', index: 'Summary', width: 240, align: 'left' },
      { name: 'Categories', index: 'Categories', width: 140, align: 'left' },
      { name: 'Affected Places', index: 'AffectedPlaces', width: 140, align: 'left' }
    ],
    pager: jQuery('#searchResultPager'),
    rowNum: 10,
    rowList: [5, 10, 20, 50],
    sortname: 'Title',
    sortorder: 'asc',
    imgpath: './Scripts/jqGrid/themes/green/images',
    caption: 'Report Search Results',
    editurl: './Report.mvc/Edit/',
    height: 'auto',
    multiselect: true,
    multiboxonly: true, //adds check box column
    viewrecords: true,
    recordtext: ' Reports',
    pgtext: ' of ',
    altRows: true,
    loadComplete: function() {
        var ids = jQuery("#searchResultList").getDataIDs();
        for (var i = 0; i < ids.length; i++) {
            var cl = ids[i];
            be = "<a href='./Report.mvc/Edit/" + cl + "' title='Edit'><img src='./Content/Images/Icons/Edit.png' border='0' alt='Edit' /></a>";
            se = "<a href='./Report.mvc/Details/" + cl + "' title='View'><img src='./Content/Images/Icons/view.png' border='0' alt='View' /></a>";
            ce = "<a href='./Report.mvc/Delete/" + cl + "' title='Delete'><img src='./Content/Images/Icons/delete.png' border='0' alt='Delete' /></a>";
            jQuery("#searchResultList").setRowData(ids[i], { act: be + se + ce })
        }
    }
}).navGrid('#searchResultPager',
{ edit: false, add: false, del: false, search: false }, //options 
{ height: 280, reloadAfterSubmit: false }, // edit options 
{ height: 280, reloadAfterSubmit: false }, // add options 
{ reloadAfterSubmit: false }, // del options 
{} // search options 
);

Я также обнаружил, что мне нужно добавить точку, чтобы это работало на сервере IIS 6. Но это работает.

Проблема в том, что у меня есть ссылки в столбце 'act' для перехода на страницу редактирования. Страница редактирования использует ту же главную страницу и, следовательно, те же сценарии. Тем не менее, URL-адрес страницы - /MyWebApp/Report.mvc/Edit/# (где # - идентификатор редактируемого отчета). И jqGrid не будет инициализироваться.

В консоли Firebug я вижу ошибку:

jQuery("#searchResultList").jqGrid is not a function

           loadComplete: function() {\r\n

я уверен, что это фальшивка, потому что я вижу только одно изменение - URL теперь на один уровень глубже (/Report.mvc/Edit vs. /Report.mvc).

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

Я думаю, что это проблема с обработкой URL в jqGrid, потому что я попытался установить для параметра url следующие значения:

http://server_name/MyWebApp/Report.mvc/GetResultsL2E/  and
/MyWebApp/Report.mvc/GetResultsL2E/

В обоих случаях возникали ошибки скрипта на всех страницах, ссылаясь на то, что s.data или s.url не являются функцией в скрипте jQuery.js.

У кого-нибудь есть советы, как заставить это работать в моей среде развертывания?

UPDATE: Я давно работал над этой проблемой, но теперь я обнаружил, что тестовый сервер, который имел эти странные причуды, является виртуальным сервером. Я пытаюсь выяснить, имеет ли это какое-либо отношение к этой и другим проблемам в этой конкретной сети.

Ответы [ 2 ]

1 голос
/ 05 августа 2009

"jqGrid не является функцией, это означает, что файл grid.base.js не был загружен, что означает, что jQuery.jqGrid.js либо не был загружен до вашего вызова .jqGrid, либо завершился неудачей. Посмотрите на панель Net в Firebug. grid.base.js должен загрузить перед этим вызовом.

Это не обработка URL сетки, потому что у вас еще нет сетки, если вы видите эту ошибку.

0 голосов
/ 18 июня 2010

Вы должны отредактировать этот файл: JQuery.JQGrid.js.

Найти это объявление (строка 3): var pathtojsfiles = "js/"; // need to be adjusted

Измените путь с "js /" на любой другой путь к файлам jqGrid jqGrid.

Я изменил его на: var pathtojsfiles = "jqgrid/js/";
и это сработало.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...