ASP.NET Dynamic Data: обработка ошибок при удалении записей
Столкнулся недавно с такой проблемой: при попытке удаления записи, которая не может быть удалена из-за внешних связей (FOREIGN KEY), браузер выдает внизу ошибку:
Ошибка JavaScript выдается в данном случае из-за того, что в мастер-странице Site.master значение EnablePartialRendering установлено в true.
В противном случае будет выдаваться стандартная страница с информацией об ислючении:
Server Error in '/' Application. The DELETE statement conflicted with the...
ИМХО, это не совсем нормальное поведение, так как понять очень трудно, что же на самом деле происходит.
Чтобы информация об исключении показывалась на странице, необходимо выполнить следующие дейсвия:
1. В файлах DynamicData/PageTemplates/Details.aspx и DynamicData/PageTemplates/List.aspx необходимо для DeleteLinkButton установить CausesValidation="true" (по умолчанию там стоит false).
2. Переопределить для вашего Linq To SQL класса один из двух методов класса DataContext и кинуть исключение ValidationException:
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode) {<br /> try {<br /> base.SubmitChanges(failureMode);<br /> }<br /> catch (Exception e) {<br /> throw new ValidationException(null, e);<br /> }<br />}<br /><br />или<br /><br />partial void DeleteCategory(Category instance) {<br /> try {<br /> ExecuteDynamicDelete(instance);<br /> }<br /> catch (Exception e) {<br /> throw new ValidationException(null, e);<br /> }<br />}
Вызов ValidationException("Error Text") покажет на странице вместо оригинального текста исключения "Error Text", что гораздо предпочтительней для продакшна.
Как обработать ошибки при использовании Linq To Entities, можно почитать здесь.