Pregunta

Estoy tratando de implementar un sitio ASP.NET MVC en un servidor Windows 2003, IIS 6.0 con el marco 3.5 instalado (pero no ASP.NET MVC, solo está en la carpeta bin). El sitio utiliza jqGrid, pero en el servidor de implementación la cuadrícula falla en ciertos casos.

La página maestra del sitio web está en /Views/Shared/Site.Master. Tiene una etiqueta de script para incluir JavaScript para inicializar y cargar un jqGrid.

Encontré que cuando desplegué, ni el JavaScript '' / '' ni el ASP '' ~ '' forzó la ruta a los archivos de script a rutas absolutas. Necesitaba agregar un código para asegurarme de que la ruta estaba completa:

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

La url en la función de inicialización jqGrid incluye la ruta al método del controlador para obtener los datos iniciales, así:

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 
);

También descubrí que tenía que agregar el punto para que esto funcionara en el servidor IIS 6, pero funciona.

El problema es que tengo enlaces en la columna 'act' para navegar a una página de edición. La página de edición usa la misma página maestra y, por lo tanto, los mismos scripts. Sin embargo, la URL de la página es /MyWebApp/Report.mvc/Edit/# (donde # es la ID del informe a editar). Y jqGrid no se inicializará.

En la consola Firebug veo el error:

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

           loadComplete: function() {\r\n

que estoy bastante seguro es falso, porque la única variación que puedo ver es que la URL ahora es un nivel más profundo (/Report.mvc/Edit vs. /Report.mvc).

Hay una serie de cosas extrañas en esta red y, como contratista, no tengo control sobre ellas y no tengo mucho más control sobre el servidor.

Estoy pensando que esto es un problema con el manejo de jqGrid de la URL, porque traté de establecer el parámetro url en los siguientes valores:

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

Ambos generaron errores de script en todas las páginas, haciendo referencia a que s.data o s.url no son una función en el script jQuery.js.

¿Alguien tiene alguna pista sobre cómo hacer que esto funcione en mi entorno de implementación?

ACTUALIZACIÓN: Hace mucho tiempo trabajé en torno a este problema, pero ahora descubro que el servidor de prueba que ha tenido estas peculiaridades extrañas es un servidor virtual. Estoy buscando averiguar si eso tiene alguna relación con este y otros problemas en esta red en particular.

¿Fue útil?

Solución

" jqGrid no es una función significa que el archivo grid.base.js no se ha cargado, lo que significa que jQuery.jqGrid.js no se cargó antes de su llamada a .jqGrid o falló. Mira el panel Red en Firebug. grid.base.js must cargar antes de esta llamada.

No es el manejo de URL de la cuadrícula, porque todavía no tiene una cuadrícula si ve este error.

Otros consejos

Debe editar este archivo: JQuery.JQGrid.js.

Encuentre esta declaración (línea 3): var pathtojsfiles = " js / " ;; // necesita ser ajustado

Cambiar la ruta de " js / " cualquiera que sea su ruta a sus archivos jqGrid javascript.

Lo cambié a: var pathtojsfiles = " jqgrid / js / " ;;
Y funcionó.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top