在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>");
}
答案 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");
}