GridView с прикрепленным LinqDataSource - строка не найдена или изменено исключение

У меня есть GridView с прикрепленным к нему LinqDataSource. Я хочу контролировать исключение «Строка не найдена или изменена», предупреждающая пользователя о том, что запись, которую он пытается обновить, была изменена кем-то другим.

В методе OnUpdated объекта LinqDataSource я могу обработать исключение, выполнив следующие действия:

protected void LDS_Updated(object sender, LinqDataSourceStatusEventArgs e)
{
    if (e.Exception != null && e.Exception.HResult == -2146233088)
    {
        ScriptManager.RegisterStartupScript(UpdatePanel1, typeof(UpdatePanel), "Row not found or changed", "alert('Row not found or changed');", true);
    }
}

Проблема в том, что возникает исключение JavaScript, а предупреждение не появляется, как вы можете видеть в моей консоли Firebug:

http://i.stack.imgur.com/18F30.png

Как я могу избежать этой ошибки JavaScript и показать свое «предупреждение»? Заранее спасибо!


person Lorenzo Morillas    schedule 28.05.2015    source источник


Ответы (1)


Установите e.ExceptionHandled в значение true.

https://msdn.microsoft.com/fr-fr/library/system.web.ui.webcontrols.linqdatasourcestatuseventargs.exceptionhandled(v=vs.110).aspx

Здесь вы просто делаете что-то в случае исключения, но на самом деле вы не обрабатываете его, вы не говорите стеку, что вы обработали этот случай, все в порядке, не нужно об этом беспокоиться.

Кстати, я бы не стал проверять код исключения HResult (который кажется нестабильным), но я бы проверил тип исключения. Однако не уверен, что это лучший метод.

person thomasb    schedule 28.05.2015
comment
Вау, это работает! Спасибо большое, сэр, даже представить себе не мог, что все так просто :) - person Lorenzo Morillas; 28.05.2015