2010-09-21 2 views
1

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

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

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

EDIT: Для Elmah, я использую решение по Elmah автора - How to get ELMAH to work with ASP.NET MVC [HandleError] attribute?

+0

Когда вы говорите «Переадресация на частичный просмотр», вы имеете в виду, что вы сделаете еще один запрос AJAX, чтобы заменить div «SearchResult» на содержимое вашего частичного представления? – StriplingWarrior

ответ

2

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

Update

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(), вы можете зарегистрировать ошибку, а затем вернуть правильный вид.

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

+0

Проблема в том, что исключение должно сначала отправиться в Эльму, чтобы оно было зарегистрировано. – byte

+0

См. Мое обновление .. –

+0

Спасибо, Дэвид, у меня в настоящее время есть похожий код, как то, что вы указали выше, минус строка ErrorSignal ***. Если вы видите мое редактирование выше, я показал решение Elmah, которое я использую. Это помогает просто написать атрибут HandleError вместо ErrorSignal *** везде в коде. Но решение, которое вы предоставили, и которое у меня уже есть в моем приложении, не очень хорошо подходит для решения фильтра HandleError, приведенного в ссылке выше. – byte

1

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

+0

Под «перенаправлением на частичный просмотр» я имел в виду что когда Elmah регистрирует исключение, моя пользовательская страница ошибок должна быть возвращена. Что-то в строках атрибута defaultRedirect customErrors в файле web.config или "View" атрибута HandleError. В моем случае я хотел бы, чтобы частичный вид возвращался. – byte

Смежные вопросы