Elmah и частичный вид - PullRequest
       6

Elmah и частичный вид

1 голос
/ 21 сентября 2010

У меня есть страница, которая содержит несколько div.Действие на одном div изменяет содержание другого div.Каждый div загружает частичное представление из контроллера.Например, div для «Search» и еще один div для «SearchResult».Div "Search" содержит пару полей и кнопку.При нажатии этой кнопки метод контроллера вызывается асинхронно с использованием Ajax.Этот метод контроллера может либо вернуть частичное представление «Результат поиска», либо выдать исключение.

При успешном выполнении метода мой обратный вызов Ajax обновит содержимое div «SearchResult» с использованием данных частичного просмотра, возвращаемых методом controllers.

Для всех необработанных исключений я использую Elmah.Исходя из вышеизложенного, я бы хотел, чтобы Elmah зарегистрировал ошибку и перенаправил ее в частичное представление.Я пробовал ошибки клиентов, и это работает для просмотра.Один из вариантов - удалить Error.aspx и настроить defaultHandler для вызова другого метода (скажем, MyCustomError) контроллера, который может возвращать пользовательскую ошибку как частичное представление.Как получить исходную информацию об исключении в этом методе «MyCustomError» или частичном представлении «MyCustomError»?

РЕДАКТИРОВАТЬ: Для Elmah я использую решение автора Elmah - Как заставить работать ELMAHс атрибутом ASP.NET MVC [HandleError]?

Ответы [ 2 ]

2 голосов
/ 21 сентября 2010

Может быть передать исключение в качестве модели для частичного просмотра?

Обновление

public ActionResult DoSomething()
{

    try
    {
        ...
    } 
    catch(Exception e)
    {
        // send the error to Elmah
        ErrorSignal.FromCurrentContext().Raise(e);
        // pass it to the error display partial view.
        return View("ErrorDisplayControl",e);
    }

    return View();

}

Если вы включите это в свой основной вид, используя RenderAction() вместо RenderPartial(), вы можете зарегистрировать ошибку и затем вернуть правильный вид.

Кроме того, вы, вероятно, знаете, что вам следует представлять более дружественную ошибку пользователю вместо реального сообщения об исключении. Сообщения об исключениях не только сбивают с толку пользователей, но и предоставляют клиенту такие необработанные данные, что создает некоторые проблемы с безопасностью.

1 голос
/ 21 сентября 2010

Свойство TempData хорошо работает для такого рода вещей.Любая информация, которую вы помещаете в TempData, останется там с помощью следующего запроса.Поэтому, если вы поместите туда информацию об ошибке, когда она произойдет, а затем ваш код на стороне клиента создаст новый ajax-запрос к странице ошибки, действие контроллера ошибок или частичное представление может получить информацию об ошибке из TempData.

...