JqG​​rid形成服务器验证和自定义错误消息

时间:2011-02-24 10:33:57

标签: jquery asp.net-mvc jqgrid

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

  1. 我想使用asp.mvc中的服务器端验证来在jqgrid编辑表单上显示验证消息。 (这是有效的吗?)
  2. 我想在应用程序中发生异常时在编辑表单上覆盖消息(内部服务器错误...)。 (这应该是可能的,但我不知道如何做到这一点,可能使用errorTextFormat,但是如何?)
  3. 有人可以举例吗?

1 个答案:

答案 0 :(得分:4)

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

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

old answer函数的确切代码应取决于服务器响应的格式。我在站点内部使用带有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
});

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