【问题标题】:JqGrid forms server validations and custom error messagesJqG​​rid 形成服务器验证和自定义错误消息
【发布时间】:2011-07-03 11:17:50
【问题描述】:

我有一个带有工具栏的可编辑网格,其中包含用于编辑添加和删除记录的按钮。

  1. 我想使用我的 asp.mvc 中的服务器端验证来在 jqgrid 编辑表单上显示验证消息。 (这可能吗?)
  2. 当应用程序发生异常时,我想覆盖编辑表单上的消息(内部服务器错误...)。 (这应该是可能的,但我不知道怎么做,也许使用errorTextFormat,但是怎么做?)

有人可以举个例子吗?

【问题讨论】:

    标签: jquery asp.net-mvc jqgrid


    【解决方案1】:

    你说得对,errorTextFormat 是在 HTTP 错误的情况下获取服务器响应并显示相应错误消息的正确方法。

    首先,您的服务器必须在 HTTP 标头中返回带有 HTTP error code 的响应。然后你应该定义你的errorTextFormat事件句柄的实现作为prmEditprmAddprmDel参数的一部分navGrid或者你可以覆盖jqGrid默认设置(见here)。我个人更喜欢通过修改jQuery.jgrid.editjQuery.jgrid.del来设置errorTextFormat。对应的代码示例可以在下面的old answer中找到。

    errorTextFormat 函数的确切代码应该取决于服务器响应的格式。我在站点内部使用带有 WFC 的 ASP.NET MVC,服务器可以返回 JSON 编码的字符串响应(如果错误来自我明确抛出的 throw new WebFaultException<string> ("my error text", statusCode);)或有时是 HTML 响应。在我对errorTextFormat 的实现中,我测试了我收到了哪种错误响应并转换了服务器响应。这是代码片段:

    my.errorTextFormat = function (data) {
        var str = data.responseText.substr(0, 1);
        var str1 = data.responseText.substr(0, 6).toLowerCase();
        if (str === '"') {
            var errorDetail = jQuery.parseJSON(data.responseText);
            var s = "Fehler: '";
            s += data.statusText;
            s += "'. Details: ";
            s += errorDetail;
            return s;
        }
        else if (str1 === "<html " || str1 == "<html>" ||
                 data.responseText.substr(0, 169) === '<?xml version="1.0" encoding="utf-8"?>\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html ') {
            var bodyHtml = /<body.*?>([\s\S]*)<\/body>/.exec(data.responseText)[1];
            return bodyHtml; //bodyContents1;
        }
        else {
            var res = "Status: '";
            res += data.statusText;
            res += "'. Felhercode: ";
            res += data.status;
            return res;
        }
    };
    jQuery.extend(jQuery.jgrid.edit, {
        ...
        errorTextFormat: my.errorTextFormat
    });
    jQuery.extend(jQuery.jgrid.del, {
        ...
        errorTextFormat: Testportal.errorTextFormat
    });
    

    代码并不完美,但您可以使用它来创建自己的代码。

    【讨论】:

    • 这对我不起作用。我的 mvc 控制器返回 500 错误,我在编辑时使用了上面的代码,并且该事件从未被触发。
    • @aman:您使用的是哪个代码?您使用哪个版本的jqGrid以及来自哪个fork的jqGrid?答案非常陈旧且不完整(例如,var my = {}; 不存在作为第一条语句,Testportal.errorTextFormat 应替换为 my.errorTextFormat 原因)。较新版本的 jqGrid 仅包含 localized 消息,并且必须将 $.jgrid.edit$.jgrid.del 替换为,例如,$.jgrid.locales["en-US"].edit$.jgrid.locales["en-US"].del
    • 其实我在这里stackoverflow.com/questions/48524588/…提出了一个问题。搜索时出现了这个答案。你能在上面的链接中看到我的帖子,看看有什么解决办法吗?谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-28
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-18
    • 2016-12-04
    相关资源
    最近更新 更多