2015-04-10 2 views
4

У меня есть частичный вид, который загружает ObjectResult из процедуры SQL. Это использует встроенный метод EF.MVC 5 Jquery Load - Захват внутреннего исключения

public virtual ObjectResult<Something_Result> getSomething() 
{ 
    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Something_Result>("getSomething"); 
} 

Так что обычная проблема - это таймауты из базы данных, и я хотел бы показать это. Но я не могу найти это в объекте исключения из функции Ajax.Load(). В ответText я получаю только "{"message":"An error occurred while executing the command definition. See the inner exception for details."}" и со статусом: 500

Так это простой способ получить внутреннее исключение? Вот исключение брошенного Ajax.load() функция http://i.imgur.com/ZIrTrMU.jpg А вот внутреннее исключение из EF: http://i.imgur.com/LgOhOlB.png

ответ

2

Вы можете поставить поймать блок попробовать в вашем слое доступа к данным, где вы вызываете метод getSomething и отправьте соответствующий текст ответа на стек. В зависимости от того, где вы ставите блок поймать, вы можете проверить, если:

if(ex.Number == -2) 

или

if(ex.InnerException != null && ex.InnerException.Number == -2) 
return Json(new { successful = false, Message = "Timeout" }); 

и вернуть соответствующий текст ответа в качестве ответа Json или если только хотите обрабатывать TimeoutException вы можете положить в конкретный блок catch для «Timeout Exception»

catch(TimeoutException ex) 
{ return Json(new { successful = false, Message = "Timeout" }); } 
+0

забыл упомянуть, что -2 является идентификатором TIMEOUT_EXCEPTION. – shwetaOnStack

+0

Хммм Я знаю, как я мог поймать ошибку на C#, а затем вернуть ее в объект JSON. Проблема в том, что это MVC ActionResult, который возвращает PrtialView. return PartialView («_ Partial/_View», модель); И эта модель обрабатывается в представлении с образцовой ссылкой на top @model App.ViewModels.SomeRepository, поэтому не уверен, насколько легко было бы изменить это на ответ JSON? – stibay

+0

Yo может очень хорошо вернуть ответ json от метода действия, который возвращает ActionResult.So в случае этой ошибки вы отправите ответ Json, и в противном случае вы вернете частичный вид. В обработчике успеха вашего вызова ajax вы можете определить, какой тип объекта вы получили, проверив что-то вроде 'if (data.Message! = Undefined)', а затем покажите ошибку, иначе повторите рендеринг частичного представления – shwetaOnStack

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