1

ASP.NET MVC サイトを、3.5 フレームワークがインストールされた Windows 2003、IIS 6.0 サーバーに展開しようとしています (ただし、ASP.NET MVC ではなく、bin フォルダーにあります)。このサイトでは jqGrid を使用していますが、展開サーバーでグリッドが失敗する場合があります。

Web サイトのマスター ページは /Views/Shared/Site.Master にあります。jqGrid を初期化してロードするための JavaScript を含める script タグがあります。

配置したときに、JavaScript の "/" も ASP の "~" も、スクリプト ファイルへのパスを絶対パスに強制していないことがわかりました。パスが完全であることを確認するために、いくつかのコードを追加する必要がありました。

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

jqGrid 初期化関数の URL には、次のように、初期データを取得するためのコントローラー メソッドへのパスが含まれています。

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/# です (# は編集するレポートの ID です)。また、jqGrid は初期化されません。

Firebug コンソールに次のエラーが表示されます。

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

           loadComplete: function() {\r\n

私が確認できる唯一のバリエーションは、URL が 1 レベル深くなったこと (/Report.mvc/Edit と /Report.mvc) だけであるため、これは偽物であると確信しています。

このネットワークには多くの風変わりなものがあり、請負業者として私はそれらを制御することはできず、サーバーを制御することもできません.

url パラメータを次の値に設定しようとしたため、これは jqGrid の URL の処理に問題があると考えています。

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

両方とも、s.data または s.url が jQuery.js スクリプトの関数ではないことに言及して、すべてのページでスクリプト エラーを発生させました。

私の展開環境でこれを機能させる方法についてのヒントはありますか?

更新:私はずっと前にこの問題を回避しましたが、これらの奇妙な癖のあるテストサーバーが仮想サーバーであることがわかりました。それが、この特定のネットワークに関するこの問題やその他の問題に関係があるかどうかを調べています。

4

2 に答える 2

1

「jqGridが関数ではないということは、grid.base.jsファイルがロードされていないことを意味します。つまり、.jqGridを呼び出す前にjQuery.jqGrid.jsがロードされていないか、失敗しました。Firebugのネットパネルを見てください。 grid.base.jsは、この呼び出しの前にロードする必要があります。

このエラーが表示された場合はまだグリッドがないため、これはグリッドのURL処理ではありません。

于 2009-08-05T13:31:33.180 に答える
0

このファイルを編集する必要があります。 JQuery.JQGrid.js.

次の宣言を見つけます (3 行目):var pathtojsfiles = "js/"; // need to be adjusted

パスを「js/」から jqGrid JavaScript ファイルへのパスに変更します。

私はそれを次のように変更しました:var pathtojsfiles = "jqgrid/js/";
そしてそれはうまくいきました。

于 2010-06-18T17:52:11.570 に答える