删除记录时找不到元素

2024-04-20

JqG​​rid 4.6。

一切正常。唯一的问题是,当我打开 Firefox 调试器并转到控制台时。如果我删除一条记录(单击垃圾桶图标,然后弹出删除对话框,单击删除按钮并刷新页面等),调试器会警告我。

没有找到元素

可能的脚本是:

$(gridSelector).jqGrid('navGrid', pagerSelector,
            {
                //navbar options
                edit: true,
                editicon: 'ace-icon fa fa-pencil blue',
                add: true,
                addicon: 'ace-icon fa fa-plus-circle purple',
                del: true,
                delicon: 'ace-icon fa fa-trash-o red',
                search: true,
                searchicon: 'ace-icon fa fa-search orange',
                refresh: true,
                refreshicon: 'ace-icon fa fa-refresh green',
                view: true,
                viewicon: 'ace-icon fa fa-search-plus grey',
                beforeRefresh: function () {
                    grid.jqGrid('setGridParam', { datatype: 'json' }).trigger('reloadGrid');
                }
            },

            {
                //delete record form
                closeAfterDelete: true,
                recreateForm: true,
                mtype: 'DELETE',
                onclickSubmit: function (params, postdata) {
                    params.url = API_URL + 'DeleteVendor';
                },
                beforeShowForm: function (e) {
                    var form = $(e[0]);
                    if (form.data('styled')) return false;

                    form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />');
                    styleDeleteForm(form);

                    form.data('styled', true);
                    return true;
                }
            }

Also

function styleDeleteForm(form) {
            var buttons = form.next().find('.EditButton .fm-button');
            buttons.addClass('btn btn-sm btn-white btn-round').find('[class*="-icon"]').hide(); //ui-icon, s-icon
            buttons.eq(0).addClass('btn-danger').prepend('<i class="ace-icon fa fa-trash-o"></i>');
            buttons.eq(1).addClass('btn-default').prepend('<i class="ace-icon fa fa-times"></i>');
        }

虽然这个错误并没有影响我的结果。我找不到警告。我想把它去掉。

EDIT:

我在谷歌浏览器中尝试过。看起来还可以。也许这是 Firefox 的错误?


创建后演示项目 http://www.ok-soft-gmbh.com/ForStackOverflow/ProductStore.zip它可以用来重现“问题”我可以检查和描述它。

To reproduce the problem one need to start the MVC application and to use Firefox as frontend. One should start the integrated Debugger (by Ctrl+Shift+S or menu "Tools" / "Web Developer" / "Debugger") and to examine Browser Console window. The window contains many warnings, which are suspected for Firefox, but what are absolutely correct actions and the warnings are absolutely unneeded. After deleting of any row one will see the message like

我仔细检查了这个问题,确实如此错误警告,因为对 REST 操作的 HTTP 流量的误解。 ASP.NET MVC 的 DELETE 方法,其中有void作为返回值(例如public void DeleteProduct(int id)) 产生如下 HTTP 响应

HTTP/1.1 204 No Content
Cache-Control: no-cache
Pragma: no-cache
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNA==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:23:51 GMT

火狐浏览器的bug:它为所有没有正文的 HTTP 响应显示消息“未找到元素”。因此如果状态码是204(无内容)或者如果状态代码是200(OK),但是body是空的(存在HTTP headerContent-Length: 0)然后 Firefox 怀疑未找到 REST 资源,并显示“警告”和文本“未找到元素”。

如果您不想看到该消息,则必须在 DELETE 响应正文中返回一些数据。例如

public HttpResponseMessage DeleteProduct(int id)
{
    bool isDeleted = _repository.Remove(id);
    if (!isDeleted) {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
    return Request.CreateResponse(HttpStatusCode.OK, "OK!");
}

产生的响应如下

HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =?UTF-8?B?QzpcVXNlcnNcT2xlZ1xEb3dubG9hZHNcUHJvZHVjdFN0b3JlXFByb2R1Y3RTdG9yZVxhcGlccHJvZHVjdHNcNg==?=
X-Powered-By: ASP.NET
Date: Fri, 12 Feb 2016 09:05:19 GMT
Content-Length: 5

"OK!"

我个人认为,最好忽略 Firefox 的“警告”并持有public HttpResponseMessage DeleteProduct(int id)。我仍然建议您更新您使用的存储库

interface IProductRepository
{
    IEnumerable<Product> GetAll();
    Product Get(int id);
    Product Add(Product item);
    bool Remove(int id);
    bool Update(Product item);
}

where Remove将布尔值作为返回类型。实施可以是

public bool Remove(int id)
{
    return _products.RemoveAll(p => p.Id == id) > 0;
}

和 MVC 代码

public void DeleteProduct(int id)
{
    _repository.Remove(id);
}

将被固定为

public void DeleteProduct(int id)
{
    bool isDeleted = _repository.Remove(id);
    if (!isDeleted)
    {
        throw new HttpResponseException(HttpStatusCode.NotFound);
    }
}

我想强调的是,上述所有问题都是纯粹的 ASP.NET MVC 问题或 Firefox 问题,与免费的 jqGrid 或 jqGrid 没有直接关系。

可以下载修改后的项目here http://www.ok-soft-gmbh.com/ForStackOverflow/ProductStore1.zip. The ProductsController.cs文件包含注释版本DeleteProduct,这在 Firefox 中不会产生任何警告。您可以通过更改虚拟文本来使用代码"OK!"到空字符串""或者一些其他的测试。 Firefox 的 bug 非常古老(它的起源是错误 521301 https://bugzilla.mozilla.org/show_bug.cgi?id=521301).

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

删除记录时找不到元素 的相关文章

  • 除了更改标题之外,如何在 Firefox 中强制另存为对话框?

    有没有办法在 ff 中强制打开 www example com example pdf 的另存为对话框 我无法更改标题 如果您可以将文件以 Base64 格式输出到客户端 则可以使用 data uri 进行下载 location href
  • 标签获取 href 值

    我有以下 html div class threeimages a img alt Australia src Images Services 20button tcm7 9688 gif a div class text h2 a hre
  • JavaScript 重定向到新窗口

    我有以下代码 它根据下拉列表的值重定向到页面 我如何使其在新窗口中打开 function goto form var index form select selectedIndex if form select options index
  • 如何以编程方式处理 JqGrid 事件?

    我正在使用JqG rid 的 ASP NET 包装器 http www trirand net demoaspnet aspx 我想以编程方式连接一些网格的处理程序events http www trirand com jqgridwiki
  • MVC 在布局代码之前执行视图代码并破坏我的脚本顺序

    我正在尝试将所有 javascript 包含内容移至页面底部 我正在将 MVC 与 Razor 一起使用 我编写了一个辅助方法来注册脚本 它按注册顺序保留脚本 并排除重复的内容 Html RegisterScript scripts som
  • Meteor - 从客户端取消服务器方法

    我正在通过服务器方法执行数据库计数 用户可以选择他们希望如何执行计数 然后调用该方法 我的问题是 计数可能需要一些时间 并且用户可能会在方法运行时改变主意并请求不同的计数 有什么方法可以取消调用的方法并运行新的计数吗 我认为 this un
  • jquery从变量中删除html元素

    我将 html 保存在变量中 var itinerary events today html 我有很多 html 和一个按钮我想删除 它的 ID 为 myButton 如何从变量中保存的 html 中删除它 我建议这种方法 var itin
  • 在javascript中解析json - 长数字被四舍五入

    我需要解析一个包含长数字的 json 在 java servlet 中生成 问题是长数字被四舍五入 当执行这段代码时 var s x 6855337641038665531 var obj JSON parse s alert obj x
  • 动态地将工具提示文本设置为 div 元素

    我正在尝试动态地将工具提示文本设置为容器 div 并对我刚刚添加到有序列表的每个 div 元素 elem Alias Status 使用 jQuery function addNewElement elem var li li li li
  • Firefox 书签探索未超过 Javascript 的第一级

    我已经编写了一些代码来探索我的 Firefox 书签 但我只获得了第一级书签 即我没有获得文件夹中的链接 e g 搜索引擎 雅虎网站 谷歌网站 在此示例中 我只能访问 Search engines 和 google com 不能访问 yah
  • Javascript 数组到 VBScript

    我有一个使用 Javascript 构建的对象数组 我需要使用 VBScript 读取它 如下例所示 我找不到在 VbScript 代码中循环遍历数组的方法myArray object 这个例子是我的问题的简化 我无法更改页面的默认语言 这
  • SignalR 似乎正在减慢我的 MVC/Azure 应用程序的启动速度

    我有一个 MVC 应用程序在 Windows Azure 上的 WebRole 上的 NET 4 5 下运行 使用 SignalR 1 0 alpha2 并使用 ServiceBus 底板 在我的 App Start 文件夹中 我有 Reg
  • 在 vue.js 中访问数组对象属性

    给定以下数组vue js packageMaps Object packageMap 0 Object Id 16 PackageType flag list ProductCode F BannerBase packageMap 1 Ob
  • 如何在jquery中以相反的顺序迭代元素? [复制]

    这个问题在这里已经有答案了 我是jquery的新手 我想知道如何使用each 在jquery中以相反的顺序迭代表单元素 任何帮助 将不胜感激 尝试这个 input get reverse each function
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 在 React.js 中编辑丰富的数据结构

    我正在尝试为数据结构创建一个简单的基于网格的编辑器 但我在使用 React js 时遇到了一些概念问题 他们的文档对此没有太大帮助 所以我希望这里有人可以提供帮助 首先 将状态从外部组件传输到内部组件的正确方法是什么 是否有可能将内部组件中
  • Javascript/Jquery:确定用户是否使用鼠标滚轮、滚动条或键盘滚动

    我正在尝试让用户界面正常工作 如果他们使用鼠标滚轮 我需要让它以一种方式滚动 如果他们使用滚动条 我需要让它以另一种方式滚动 如果他们使用键盘 我需要让它以另一种方式滚动 我相信滚轮和滚动条都充当鼠标事件 但是当单击滚动条时我无法让 jav
  • 导致回发到与弹出窗口不同的页面

    我有一个主页和一个详细信息页面 详细信息页面是从主页调用的 JavaScript 弹出窗口 当单击详细信息页面上的 保存 按钮时 我希望主页 刷新 是否有一种方法可以调用主页的回发 同时还可以从详细信息页面维护保存回发 Edit 使用win
  • jQuery 对象相等

    如何确定两个 jQuery 对象是否相等 我希望能够在数组中搜索特定的 jQuery 对象 inArray jqobj my array 1 alert deviceTypeRoot deviceTypeRoot False alert d
  • 如何从图像输入中获取 xy 坐标?

    我有一个输入设置为图像类型

随机推荐