在Asp.net中,我无法正常捕获任何异常?

时间:2010-06-16 18:09:35

标签: c# asp.net exception exception-handling

在Asp.net(c#)中,我无法正确捕获异常(FileNotFoundException)...我不知道原因。实际上文件不存在..但是catch语句无法捕获异常.. 这是代码..

try
{
System.Drawing.Image imgg1 = System.Drawing.Image.FromFile(Server.MapPath("").ToString() + "\\images\\img1.jpg");
}
catch (FileNotFoundException)
{
    Response.Write("<script>alert('Please Select and upload Student's Photo');</script>");
}

9 个答案:

答案 0 :(得分:6)

你可以找出被抛出的类型

try
{
System.Drawing.Image imgg1 = System.Drawing.Image.FromFile(Server.MapPath("").ToString() + "\\images\\img1.jpg");
 }
 catch (FileNotFoundException)
{
 Response.Write("<script>alert('Please Select and upload Student's Photo');</script>");
  }
catch(Exception ex)
{
   Response.Write("Ex: " + ex.GetType().ToString());
}

答案 1 :(得分:3)

你确定这是你的例外吗?

您应该尝试将FileNotFoundException替换为Exception,并检查正在播放的异常。

编辑: Q1:在调试模式下,代码实际进入了catch会话吗?

你可以重建(在Visual Studio中按Ctrl + Shift + B)代码吗?

您实际编写的代码将失败 这里有一个结尾的引用:

alert('Please Select and upload Student's Photo');

参见sintax荧光笔 替换为

alert('Please Select and upload Student\'s Photo');

答案 2 :(得分:3)

您的javascript引用文字不均衡 尝试

  alert('please upload student\'s photo');

答案 3 :(得分:2)

检查它是否存在而不是捕获该异常。

string path = Server.MapPath("~/images/img1.jpg");
if (System.IO.File.Exists(path))
{
    System.Drawing.Image imgg1 = System.Drawing.Image.FromFile(path);
}
else
{
    Page.ClientScript.RegisterStartupScript(Page.GetType(), "notfound", "alert(\"Please Select and upload Student's Photo\");", true);
}

您也过早地转发了您的javascript消息

'Please Select and upload Student's Photo'

答案 4 :(得分:1)

抛出的异常不是FileNotFoundException类型,请尝试捕获Exception,看看它是否有效

答案 5 :(得分:1)

尝试在调试器中单步调试代码,看看是否真的没有捕获异常。它还可能有助于包含一个特定的变量来保存FileNotFoundException,并包含一般异常的回退捕获,如下所示:

try
{
    System.Drawing.Image imgg1 = System.Drawing.Image.FromFile(Server.MapPath("").ToString() + "\\images\\img1.jpg");
}
catch (FileNotFoundException fnfe)
{
   Response.Write("<script>alert('Please Select and upload Student's Photo');</script>");
}
catch (Exception ex)
{
    // do something with the exception
}

答案 6 :(得分:1)

如果(在原始示例中)您尝试向页面发送javascript警报,则必须使用alert()标记将<script></script>包围起来。

但为什么在使用System.IO.File.Exists(路径)和错误标签时使用类似try-catch的块?

using System.IO;
using System.Drawing;
...

String filePath = Server.MapPath("").ToString() + "\images\img1.jpg";
if(File.Exists(filePath))
{
    Image imgg1 = Image.FromFile(filePath);
}
else
{
    lblError.Text = "Please upload a picture for this student";
    lblError.Visible = true;
}

答案 7 :(得分:1)

问题与catch块无关。这是您使用C#创建JavaScript的方式。 Response.Write将在呈现页面之前堆积输出。所以它不会被浏览器识别。这样做。

catch (FileNotFoundException)
{
   String csname1 = "Popup";

   if (!IsClientScriptBlockRegistered(csname1))
   {
      String cstext1 = "<script type=\"text/javascript\">" + "alert('Please Select and upload Student\\'s Photo');</" + "script>";
      RegisterStartupScript(csname1, cstext1);
   }
}

如果你仍然不相信我这样做就是为了证明这一点。

catch(FileNotFoundException)
{
  Response.Write("its working")
}

不要只看待与浏览器相关的呈现页面,右键单击并查看源代码,以便您可以看到实际发生的情况。

答案 8 :(得分:0)

您的异常被抛出,但您没有看到警报,因为您没有写出JavaScript。试试这个:

try
{
    System.Drawing.Image imgg1 = System.Drawing.Image.FromFile(Server.MapPath("").ToString() + @"\images\img1.jpg");
}
catch (FileNotFoundException)
{
    Page.RegisterClientScriptBlock("myScript", "<script language=javascript>alert('Please Select and upload Student's Photo');</script");
}