В Asp.net я не могу поймать любое исключение правильно? - PullRequest
0 голосов
/ 16 июня 2010

В 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 ]

6 голосов
/ 16 июня 2010

вы можете узнать, какой тип выбрасывается

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());
}
3 голосов
/ 16 июня 2010

Ваш текст в кавычках не сбалансирован. Попробуйте

  alert('please upload student\'s photo');
3 голосов
/ 16 июня 2010

Вы уверены, что это исключение, которое вы получаете?

Вы должны попытаться заменить FileNotFoundException на Exception и проверить, какое исключение выдается.

EDIT: Q1: в режиме отладки, действительно ли код входит в сеанс catch?

Не могли бы вы перестроить (Ctrl + Shift + B в Visual Studio) этот код?

На самом деле вы пишете код, который потерпит неудачу, есть заключительная цитатаздесь:

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

См. в подсветке синтаксиса заменить это

alert('Please Select and upload Student\'s Photo');
2 голосов
/ 16 июня 2010

Проверьте, существует ли оно, а не перехватите это исключение.

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'
1 голос
/ 16 июня 2010

Проблема не связана с блоком 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);
   }
}

Если вы все еще не верите мне, просто сделайте это, чтобы доказать это самому себе.будет зависеть от браузера, щелкните правой кнопкой мыши и просмотрите источник, чтобы вы могли увидеть, что на самом деле происходит.

1 голос
/ 16 июня 2010

Если (в исходном примере) вы пытаетесь написать предупреждение javascript на страницу, которую вы должны окружить своим alert() тегами <script></script>.

НО почему вы используетеблокировать блоки, когда вы можете использовать System.IO.File.Exists (путь) и метку ошибки?

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;
}
1 голос
/ 16 июня 2010

Попробуйте пройти по коду в отладчике и посмотрите, действительно ли исключение не перехватывается.Это также может помочь включить определенную переменную для хранения вашего 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
}
1 голос
/ 16 июня 2010

Исключительное исключение не относится к типу FileNotFoundException, вместо этого попробуйте перехватить исключение и посмотреть, работает ли оно

0 голосов
/ 16 июня 2010

Ваше исключение выдается, но вы не видите свое предупреждение, потому что вы не пишете 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...