例外を処理する方法は、例外が発生したクライアント ページからマスター ページのコントロールの値を設定することです。
private void deleteUser(int userid)
{
try
{
ImajUser u = new ImajUser(userid, true);
u.Delete();
lblerr.Text = "User was deleted successfully.";
lblerr.ForeColor = System.Drawing.Color.Green;
}
catch (Exception ex)
{
this.Master.ErrorTitle.Text = "Delete User";
this.Master.ErrorMessage.Text = String.Format("Error actioning request: [ {0} ]", ex.Message);
this.Master.pnlErrorBG.Visible = true;
this.Master.pnlErrorModal.Visible = true;
}
}
これをテストすると (最後にデータベースをシャットダウンして削除を試みたとき)、catch ブロックは問題なく実行されますが、初回例外が発生し、デバッガーが完全に停止します。
タイプ 'System.Data.EntityException' の最初のチャンス例外が System.Data.Entity.dll で発生しまし
た.
これは今まで見たことがありません。何が原因なのかわからないし、どうすれば直せるのかもわからない…
どんな助けでも大歓迎です!
編集
マスター ページのコントロールにアクセスするために設定しているプロパティは次のとおりです。
public virtual Label ErrorTitle { get { return lblErrorAction; } }
public virtual Label ErrorMessage { get { return lblErrorMessage; } }
public virtual Panel pnlErrorBG { get { return ErrorBackground; } }
public virtual Panel pnlErrorModal { get { return pnlErrorModal; } }
これらはコントロールを参照します。
<asp:Panel runat="server" id="ErrorBackground" visible="false"> </asp:Panel>
<asp:Panel runat="server" id="ErrorModal" visible="false">
<asp:Label runat="server" ID="lblErrorAction" CssClass="lblerrortitle"></asp:Label>
<asp:Label runat="server" ID="lblErrorMessage"></asp:Label>
<asp:Button runat="server" ID="btnErrorAction" CssClass="button" Text="Retry" OnClick="btnErrorAction_Click" />
</asp:Panel>
EDIT 2
したがって、コントロールを実際に例外が発生するページに移動しようとしましたが、マスターページでコントロールを使用するとエラーが発生し、100%機能しました。