Question

J'essaie de déployer un site ASP.NET MVC sur un serveur Windows 2003, IIS 6.0 avec le framework 3.5 installé (mais pas sur ASP.NET MVC - c'est uniquement dans le dossier bin). Le site utilise jqGrid, mais sur le serveur de déploiement, la grille échoue dans certains cas.

La page principale du site Web se trouve à /Views/Shared/Site.Master. Il a une balise de script pour inclure le JavaScript pour initialiser et charger un jqGrid.

J'ai constaté que lors de mon déploiement, ni le code JavaScript " / " ni l'ASP " ~ " forcé le chemin des fichiers de script vers des chemins absolus. J'avais besoin d'ajouter du code pour m'assurer que le chemin était complet:

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

L'URL de la fonction d'initialisation jqGrid inclut le chemin d'accès à la méthode du contrôleur pour obtenir les données initiales, comme ceci:

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

J'ai également constaté que je devais ajouter le point pour que cela fonctionne sur le serveur IIS 6, mais cela fonctionne.

Le problème est que j'ai des liens dans la colonne "act" pour accéder à une page d'édition. La page d'édition utilise la même page maître et donc les mêmes scripts. Cependant, l'URL de la page est /MyWebApp/Report.mvc/Edit/# (où # est l'ID du rapport à modifier). Et jqGrid ne s’initialisera pas.

Dans la console Firebug, l'erreur suivante apparaît:

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

           loadComplete: function() {\r\n

ce dont je suis presque sûr est faux, car la seule variation que je peux voir est que l'URL est maintenant d'un niveau plus profond (/Report.mvc/Edit vs /Report.mvc).

Il y a un certain nombre d'éléments bizarres sur ce réseau et en tant qu'entrepreneur, je n'ai aucun contrôle sur eux, et pas beaucoup plus sur le serveur.

Je pense que c'est un problème avec la gestion de l'URL par jqGrid, car j'ai essayé de définir le paramètre url sur les valeurs suivantes:

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

Les deux ont généré des erreurs de script sur toutes les pages, indiquant que s.data ou s.url n'étaient pas une fonction du script jQuery.js.

Quelqu'un a-t-il des idées pour que cela fonctionne dans mon environnement de déploiement?

UPDATE: Il y a longtemps que je travaillais autour de ce problème, mais maintenant je découvre que le serveur de test qui a eu ces bizarreries bizarres est un serveur virtuel. Je cherche à savoir si cela a une incidence sur ce problème et d’autres sur ce réseau particulier.

Était-ce utile?

La solution

"jqGrid n’est pas une fonction, cela signifie que le fichier grid.base.js n’a pas été chargé, ce qui signifie que jQuery.jqGrid.js n’a pas été chargé avant votre appel à .jqGrid ou a échoué. Regardez le panneau Net dans Firebug. grid.base.js doit charger avant cet appel.

Ce n'est pas la gestion des URL de la grille, car vous n'avez pas encore de grille si vous voyez cette erreur.

Autres conseils

Vous devez éditer ce fichier: JQuery.JQGrid.js.

Recherchez cette déclaration (ligne 3): var pathtojsfiles = " js / " ;; // besoin d'être ajusté

Modifiez le chemin d'accès de "js /". quel que soit votre chemin d'accès à vos fichiers javascript jqGrid.

Je l'ai changé en: var pathtojsfiles = "jqgrid / js /" quot
et cela a fonctionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top