0

我正在尝试将一个新成员插入数据库,当有重复的catch块工作正常时。但是当有一个新成员时,块trycatch块都会返回他们的消息。这是我的代码。

if (Request["cmd"] == "ins")
{
    try{
        mydb db = new mydb();
        member newm = new member()
        {
            Id = Request["uid"],
            Name = Request["uname"]
        };

        db.AddTomembers(newm);
        db.SaveChanges();
        Response.Write("ok");
        Response.End();
    }
    catch(Exception s) {
        Response.Write(s);
        Response.End();
    }
}
4

3 回答 3

6

这个问题并不太清楚,但我强烈怀疑问题在于Response.End()引发异常(ThreadAbortException),如记录所示:

为了模仿 ASP 中 End 方法的行为,此方法尝试引发 [ThreadAbortException] 异常。如果此尝试成功,调用线程将被中止,这对您站点的性能不利。在这种情况下,调用 End 方法后不会执行任何代码。

您正在捕获该异常,然后再次调用它。只需将 移动Response.End到一个finally块 ​​- 或者理想情况下,完全摆脱它,构建你的控制流,这样你就不需要它......再次,如文档所述:

提供此方法只是为了与 ASP 兼容,即与 ASP.NET 之前的基于 COM 的 Web 编程技术兼容。如果您想跳转到 EndRequest 事件并向客户端发送响应,通常最好改为调用 CompleteRequest。

(请注意,如果您捕获了一个特定的异常而不仅仅是Exception,您也不会遇到这个问题。)

于 2013-05-03T14:38:00.200 回答
1

如果同时写入ok了异常消息和异常消息s,则抛出异常的是 Response.End()。检查 s 以了解发生了什么。

一个猜测:Response.End() 被认为是有害的吗?

于 2013-05-03T14:37:54.953 回答
0

如果您试图在 asp.netResponse.End()Page_Load事件上调用,它将无法正常工作。看看这个线程:Response.End () doesn't abort current thread,看看如何解决它。

尽量避免对 asp.net 应用程序的响应,尝试显示面板,使用标签显示消息。

于 2013-05-03T14:38:42.143 回答