Сообщение об исключении для пользовательского интерфейса - PullRequest
5 голосов
/ 15 января 2010

Я открываю диалоговое окно jQuery, в этом окне я делаю сохранение / отмена.Чтобы сохранить, я вызываю свой контроллер, делаю некоторую проверку, сохраняю или выбрасываю исключение (MyPersonalException).Если есть исключение, я возвращаю другое представление (представление «MessageError») для отображения во всплывающем окне.Я просто хочу увидеть в модальном окне сообщение, доступное в «MyPersonalException»

Мои вопросы: 1. Это работает, но только с Firefox, а не с IE, а не с Chrome 2. Есть ли другой способ, потому что это похоже накод для простого воспроизведения сообщения.

Контроллер выглядит следующим образом:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveOrUpdate(Guid id, string firstName, string LastName)
{
    try
    {
        Employee employee = new Employee() { Id = id, FirstName = firstName, LastName = LastName };
        _employeeService.SaveOrUpdate(employee);
        return Index();
    }
    catch (MyPersonalException ex)
    {
        _model.ErrorMessage = ex.Message;
        return View("MessageError", _model);

    }
    catch (Exception ex)
    {
        _model.ErrorMessage = ex.Message;
        return View("MessageError", _model);
    }
}

Чтобы вызвать диалоговое окно, я использую этот код

jQuery (документ) .ready(function () {$ (function () {/ * var name = $ ("# firstName"), email = $ ("# lastName"), password = $ ("# isActive"), allFields = $ ([])) .add (имя) .add (электронная почта) .add (пароль), tips = $ ("# validateTips"); * /

    $("#dialog").dialog({
        bgiframe: true,
        autoOpen: false,
        modal: true,
        buttons: {
            Save: function() {
                $.ajax({
                    type: "POST",
                    url: "/Employee/SaveOrUpdate",
                    data: {
                        id: getId(),
                        firstName: getFirstName(),
                        lastName: getLastName()
                    },
                    success: function(data) {
                        if (jqueryShowResult(data))
                            $("#DisplayError").html(data);
                        else {
                            employeeId = 0;
                            $(this).dialog('close');                               
                        }
                    },
                    error: function(XMLHttpRequest, textStatus, errorThrown) {
                    }
                })

            },
            Cancel: function() {
                employeeId = 0;
                $(this).dialog('close');
            }
        },
        close: function() {
            $("#gridEmpoyee").trigger("reloadGrid");
        },
        open: function() {
            $.ajax({
                type: "POST",
                url: "/Employee/GetEmployee",
                data: {
                    id: employeeId
                },
                success: function(data) {
                    $("#employeeDetail").html(data);
                },
                error: function(XMLHttpRequest, textStatus, errorThrown) {
                }
            })
        }
    });
});

});

jQueryShowResult

<script type="text/javascript">
    jqueryShowResult = function(msg) {
        var browser;
        try //Internet Explorer
                    {
            xmlDocTest = new ActiveXObject("Microsoft.XMLDOM");
            browser = "IE";
        }
        catch (e) {
            browser = "FF";
        }

        if (browser == "IE") {
            try {
                xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                xmlDoc.async = "false";
                xmlDoc.loadXML(msg);
                var message = xmlDoc.getElementsByTagName("message")[0].childNodes[0].nodeValue;
                var code = xmlDoc.getElementsByTagName("code")[0].childNodes[0].nodeValue;

                return false;
            }
            catch (e) {
                return true;
            }
        }
        else {

            var code = $(msg).find('code').text();
            var message = $(msg).find('message').text();
            if (code == "500") {
                return false;
            }
            else {
                return true;
            }
        }
    }; 
 </script>

1 Ответ

2 голосов
/ 16 января 2010

Обновление : Извините, мы используем пользовательскую оболочку. jQuery по умолчанию не включает xmlHttpRequest в случае успеха. Ниже приведен другой подход, который работает без изменения вашего взгляда. В основном вы просто проверяете элемент с id='code' в ответе, если он существует, отображается ошибка.

success: function(data, textStatus) {
  if ($("#code",data).length) { //See if the element <whatever id='code'> exists
    $("#DisplayError").html(data);
  } else {
    employeeId = 0;
    $(this).dialog('close');                               
  }
},

Вот версия jQuery 1.4 (см. изменения здесь , обратите внимание, что Успешный обратный вызов получает объект XHR в качестве третьего аргумента ):

Сначала установите для StatusCode значение 210 context.HttpContext.Response.StatusCode = 210;, затем используйте этот формат обратного вызова:

success: function(data, textStatus, xhr) {
  if (xhr.status == 210) {
    $("#DisplayError").html(data);
  } else {
    employeeId = 0;
    $(this).dialog('close');                               
  }
},
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...