我正在尝试将 ASP.NET MVC 站点部署到安装了 3.5 框架的 Windows 2003、IIS 6.0 服务器(但不是 ASP.NET MVC - 它只是在 bin 文件夹中)。该站点使用 jqGrid,但在部署服务器上,网格在某些情况下会失败。
该网站的母版页位于/Views/Shared/Site.Master。它有一个脚本标签来包含用于初始化和加载 jqGrid 的 JavaScript。
我发现当我部署时,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 服务器上工作,但它确实有效。
问题是我在“行为”列中有链接可以导航到编辑页面。编辑页面使用相同的母版页,因此使用相同的脚本。但是,页面的 URL 是 /MyWebApp/Report.mvc/Edit/#(其中 # 是要编辑的报告的 ID)。jqGrid 不会初始化。
在 Firebug 控制台中,我看到了错误:
jQuery("#searchResultList").jqGrid is not a function
loadComplete: function() {\r\n
我很确定这是假的,因为我能看到的唯一变化是 URL 现在更深一层(/Report.mvc/Edit 与 /Report.mvc)。
这个网络上有许多古怪的东西,作为承包商,我无法控制它们,也无法控制服务器。
我认为这是 jqGrid 处理 URL 的问题,因为我试图将 url 参数设置为以下值:
http://server_name/MyWebApp/Report.mvc/GetResultsL2E/ and
/MyWebApp/Report.mvc/GetResultsL2E/
两者都在所有页面上引发脚本错误,指的是 s.data 或 s.url 不是 jQuery.js 脚本中的函数。
有人对如何在我的部署环境中进行这项工作有任何提示吗?
更新:我很久以前就解决了这个问题,但现在我发现有这些奇怪怪癖的测试服务器是虚拟服务器。我正在寻找这是否对这个特定网络上的这个问题和其他问题有任何影响。