2

我正在尝试使用 JQGrid 插件,但遇到了一个我似乎无法解决的问题。首先,我在 ASP.NET MVC 应用程序中使用网格上的最新版本 (3.5.3)。几乎一切都运行良好 - 加载我的数据,编辑表单触发正确的控制器方法。我的问题是添加记录表单。表单显示正常,但是当我单击提交按钮时,添加表单上出现以下错误: 错误状态:“内部服务器错误”。错误代码:500 我在 editURL 参数中指定的控制器方法中设置了一个断点,但它没有被命中。但是,在提交编辑表单时会这样做。从我在文档中看到的所有内容来看,他们应该在控制器中使用相同的操作方法。我很想得到这个工作。任何关于如何调试它的建议或想法都值得赞赏。这是我的网格定义。

aspx:

<script type="text/javascript">
jQuery(document).ready(function() {
    jQuery("#sandgrid").jqGrid({
        url: '/EquipTrack/GridData/',
        editurl: '/EquipTrack/Edit/',
        datatype: 'json',
        mtype: 'GET',
        height: 255,
        width: 755,
        rowNum: 5000,
        colNames: ['ID', 'Type', 'Make', 'Model', 'Year', 'Location', 'Insp Due', 'Serv Due', 'Miles/Hrs', 'Milage Dt', 'Reg By', 'Mngd By', 'Tag Exp', '', '', '', '', 'Vin Num', 'Title Num', 'GVW', 'Unlaiden Wt', 'Tag Num', 'Tag State', 'Cost', 'Inspect Rmndr(wks)', 'Tag Rmndr(wks)', 'Stolen', 'Sold', 'Lojack', 'In Repair', 'Totaled', 'Hut Sticker', 'Apportioned', 'IFTA Sticker', 'Comment'],
        colModel: [
            { name: 'equip_id', index: 'equip_id', width: 65, editable: true },
            { name: 'type_desc', index: 'type_desc', width: 130, editable: true, edittype: "select", editoptions: { dataUrl: '/EquipTrack/GetTypes'} },
            { name: 'make_descr', index: 'make_descr', width: 80, editable: true, edittype: "select", editoptions: { dataUrl: '/EquipTrack/GetMakes'} },
            { name: 'model_descr', index: 'model_descr', width: 80, editable: true, edittype: "select", editoptions: { dataUrl: '/EquipTrack/GetModels'} },
            { name: 'equip_year', index: 'equip_year', width: 60, editable: true },
            { name: 'work_loc', index: 'work_loc', width: 130, editable: true },
            { name: 'insp_due_dt', index: 'insp_due_dt', width: 100, editable: true },
            { name: 'service_due_num', index: 'service_due_num', width: 80, editable: true },
            { name: 'miles_hours', index: 'miles_hours', width: 80, editable: true },
            { name: 'miles_dt', index: 'miles_dt', width: 100, editable: true },
            { name: 'registered_by', index: 'registered_by', width: 80, editable: true, edittype: "select", editoptions: { dataUrl: '/EquipTrack/GetDivisions'} },
            { name: 'managed_by', index: 'managed_by', width: 80, editable: true, edittype: "select", editoptions: { dataUrl: '/EquipTrack/GetDivisions'} },
            { name: 'tag_expire_dt', index: 'tag_expire_dt', width: 100, editable: true,
                editoptions: { size: 12, dataInit: function(el) {
                    $(el).datepicker({ dateFormat: 'mm/dd/yy' });
                }
                }
            },
            { name: 'inspection_warn', hidden: true },
            { name: 'service_warn', hidden: true },
            { name: 'tag_warn', hidden: true },
            { name: 'equip_color', hidden: true },
            { name: 'vin_num', hidden: true, editable: true, editrules: { edithidden: true} },
            { name: 'title_num', hidden: true, editable: true, editrules: { edithidden: true} },
            { name: 'gross_v_wt', hidden: true, editable: true, editrules: { edithidden: true} },
        { name: 'unlaiden_wt', hidden: true, editable: true, editrules: { edithidden: true} },
        { name: 'tag_num', hidden: true, editable: true, editrules: { edithidden: true} },
        { name: 'tag_state', hidden: true, editable: true, editrules: { edithidden: true} },
        { name: 'cost', hidden: true, editable: true, editrules: { edithidden: true} },
        { name: 'insp_rmdr_wks', hidden: true, editable: true, edittype: "select", editoptions: { value: ":;1:1;2:2;3:3;4:4;5:5;6:6;7:7;8:8;9:9;10:10;11:11;12:12;13:13;14:14;15:15;16:16;17:17;18:18;19:19;20:20;21:21;22:22;23:23;24:24" }, editrules: { edithidden: true} },
        { name: 'tag_expire_rmdr_wks', editable: true, hidden: true, edittype: "select", editoptions: { value: ":;1:1;2:2;3:3;4:4;5:5;6:6;7:7;8:8;9:9;10:10;11:11;12:12;13:13;14:14;15:15;16:16;17:17;18:18;19:19;20:20;21:21;22:22;23:23;24:24" }, editrules: { edithidden: true} },
        { name: 'stolen', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'sold', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'lojack', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'in_repair', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'totaled', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'hut_sticker', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'apportioned', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'ifta_sticker', hidden: true, editable: true, edittype: "checkbox", editoptions: { value: "True:False" }, editrules: { edithidden: true} },
        { name: 'comment', hidden: true, editable: true, editoptions: { value: "True:False" }, editrules: { edithidden: true }, edittype: "textarea", editoptions: { rows: "2", cols: "27"} }
        ],
        sortname: 'equip_id',
        sortorder: "asc",
        afterInsertRow: function(rowid, rowdata, rowelem) {
            if (rowelem[13] == 'SET_RED') {
                jQuery("#sandgrid").setCell(rowid, 'insp_due_dt', '', { color: 'red' })
            }
            if (rowelem[14] == 'SET_RED') {
                jQuery("#sandgrid").setCell(rowid, 'service_due_num', '', { color: 'red' })
            }
            if (rowelem[15] == 'SET_RED') {
                jQuery("#sandgrid").setCell(rowid, 'tag_expire_dt', '', { color: 'red' })
            }
            if (rowelem[16] == 'SET_GREEN') {
                jQuery("#sandgrid").setCell(rowid, 'equip_id', '', { color: 'green' })
            }
            if (rowelem[16] == 'SET_PURPLE') {
                jQuery("#sandgrid").setCell(rowid, 'equip_id', '', { color: 'purple' })
            }
            //                if (rowelem[12] == '01/01/3000') {
            //                    jQuery("#sandgrid").setCell(rowid, 'tag_expire_dt','', '')
            //                }
        },
        viewrecords: true,
        pager: jQuery('#sandgridp'),
        caption: 'Inventory'
    }).navGrid('#sandgridp', {}, //options
     {reloadAfterSubmit: false, jqModal: false, closeOnEscape: true, bottominfo: "Fields marked with (*) are required" }, // edit options
     {}, // add options 
     {}, // del options
     {}, // search options
     {} // view options
      );

    /*        }).navGrid('#sandgridp',
    {}, //options
    {reloadAfterSubmit: false }, // edit options
    {reloadAfterSubmit: false }, // add options
    {reloadAfterSubmit: false }, // del options
    {} // search options
    ); */


    $('#sandgridp_center').remove();
    $('#sandgridp_right').remove();
});

4

3 回答 3

5
  1. 获取提琴手
  2. 开始追踪
  3. 重现错误
  4. Fiddler中,转到 Inspectors/TextView

这应该可以帮助您解决真正的错误。我一直将它用于产生 500 个错误的异步调用。

于 2009-09-23T17:28:59.703 回答
1

我的猜测是 ASP.NET MVC 无法绑定到您的操作,因为提交的数据无法被模型绑定器绑定。因此,它返回错误而不是进入操作。可以肯定的是,您需要查看从服务器到 AJAX 调用的完成响应。如果您使用的是 HandleErrorAttribute,那么来自服务器的响应将是 HTML,并且如果您使用的是开发服务器,则会在其中包含堆栈转储。如果您不使用 HandleErrorAttribute,那么您可能应该添加它至少用于测试目的,或者更改 Visual Studio 的配置以中断未处理的异常,并详细了解异常。我想您会发现错误来自 MVC 框架,告诉您由于某种原因它无法找到或绑定到某个操作。

于 2009-09-23T17:15:43.613 回答
1

为了确保我正确显示所有错误,我将以下内容添加到 web.config

<system.webServer>
...
<httpErrors errorMode="Detailed" />
</system.webServer>

这对我有用,因为在我的编辑/更新/删除操作中,当出现问题时我会调用 ShowValidationMessage

LogGrid.ShowEditValidationMessage("some error");

这在本地开发时似乎不需要,但在部署到登台/生产服务器时会成为问题

于 2011-10-05T00:22:10.633 回答