我正在尝试将新成员插入数据库,
如果有重复,catch
块工作正常。
但是当有一个新成员try
和catch
时
返回他们的消息。这是我的代码。
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();
}
}
答案 0 :(得分:6)
问题并不是很清楚,但我强烈怀疑问题是Response.End()
引发了异常(ThreadAbortException
),如下所示:
为了模仿ASP中End方法的行为,此方法尝试引发[ThreadAbortException]异常。如果此尝试成功,则调用线程将被中止,这对您站点的性能不利。在这种情况下,执行End方法调用后没有代码。
您正在捕获该异常,然后再次调用它。只需将Response.End
移动到finally
块 - 或者理想情况下,完全摆脱它,构建您的控制流程,这样您就不再需要了......再次,如记录所示:
此方法仅用于与ASP兼容,即与ASP.NET之前的基于COM的Web编程技术兼容。如果您想跳到EndRequest事件并向客户端发送响应,通常最好调用CompleteRequest。
(请注意,如果您发现特定的例外而不仅仅是Exception
,那么您也不会遇到此问题。)
答案 1 :(得分:1)
如果同时写入了ok
和异常消息s
,那么它就是抛出异常的Response.End()。检查s以了解发生了什么。
答案 2 :(得分:0)
如果您尝试在asp.net的Response.End()
事件上调用Page_Load
,它将无法正常工作。看一下这个帖子:Response.End () doesn't abort current thread,看看如何解决它。
尽量避免在asp.net应用程序上做出响应,尝试显示面板,使用标签来显示消息。