JqGrid формирует проверки сервера и пользовательские сообщения об ошибках - PullRequest
2 голосов
/ 24 февраля 2011

У меня есть редактируемая сетка с панелью инструментов, в которой есть кнопки для редактирования добавления и удаления записей.

  1. Я хотел бы использовать проверки на стороне сервера из моего asp.mvc для отображения сообщений проверки в форме редактирования jqgrid. (это возможно?)
  2. Я хотел бы переопределить сообщение (Внутренняя ошибка сервера ...) в форме редактирования, когда в приложении возникает исключение. (это должно быть возможно, но я просто не могу понять, как это сделать, возможно, используя errorTextFormat, но как?)

Может ли кто-нибудь привести пример?

1 Ответ

4 голосов
/ 24 февраля 2011

Вы правы, что errorTextFormat является правильным способом получения ответа сервера в случае ошибок HTTP и отображения соответствующего сообщения об ошибке.

Прежде всего ваш сервер должен вернуть ответ с код ошибки HTTP в заголовке HTTP.Затем вы должны определить свою реализацию дескриптора события errorTextFormat либо как часть prmEdit, prmAdd, prmDel параметров navGrid , либо вы можете перезаписать настройки jqGrid по умолчанию(см. здесь ).Лично я предпочитаю установить errorTextFormat , изменив jQuery.jgrid.edit и jQuery.jgrid.del.Пример соответствующего кода вы можете найти в следующем старом ответе .

Точный код функции errorTextFormat должен зависеть от формата сервераответ .Я использую ASP.NET MVC с WFC внутри сайта, и сервер может возвращать либо строковый ответ в кодировке 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
});

Код не идеален, но вы можете использовать его для создания собственного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...