none
Поток находился в процессе прерывания RRS feed

  • Вопрос

  • Здравствуйте, После выполнения вот этого кода, при правильном вводе всех параметров, открывается страница Registration.aspx на которой в конце появляется ошибка

    "ErrorSystem.Threading.ThreadAbortException: Поток находился в процессе прерывания. в System.Threading.Thread.AbortInternal() в System.Threading.Thread.Abort(Object stateInfo) в System.Web.HttpResponse.AbortCurrentThread() в System.Web.HttpResponse.End() в System.Web.HttpServerUtility.Transfer(String path, Boolean preserveForm) в System.Web.HttpServerUtility.Transfer(String path) в Registration.Button1_Click(Object sender, EventArgs e)"

    Помогите её исправить, заранее спасибо!)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data.SqlClient;
    using System.Configuration;
    using System.Threading.Tasks;
    
    
    public partial class Registration : System.Web.UI.Page
    {
        Int32 temp = 0;
        protected void Page_Load(object sender, EventArgs e)
        {
            if (IsPostBack)
            {
                SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConnectionString"].ConnectionString);
                conn.Open();
                string checkuser = "select count(*) from [reg] where Name = '" + TextBoxName.Text + "'";
                SqlCommand com = new SqlCommand(checkuser, conn);
                temp = Convert.ToInt32(com.ExecuteScalar());
                if (temp > 0) {
    
    
                    
                    Response.Write("<script>alert('username already exists')</script>");
                    HttpContext.Current.Server.Transfer("Registration.aspx");
                }
                
                conn.Close();
            }
    
        }
        protected void RadioButton1_CheckedChanged(object sender, EventArgs e)
        {
    
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            try
            {
                string str = "";
                for (int i = 0; i < CheckBoxListPrograms.Items.Count; i++)
                {
                    if (CheckBoxListPrograms.Items[i].Selected){
                        str += CheckBoxListPrograms.Items[i].Text.ToString() + ",";}
                                   
    
                }
                str = str.TrimEnd(',');
               //Если не выбран ни один чекбокс выводим сообщение
                int count = 0;
                    for (int i = 0; i < CheckBoxListPrograms.Items.Count; i++)
                    {
                        if (CheckBoxListPrograms.Items[i].Selected)
                             count++;
                    }
    
                    if (count == 0) {
                        Response.Write("<script>alert('select at least one program')</script>");
                        Server.Transfer("Registration.aspx");
                    }
    
                Guid newGUID = Guid.NewGuid();
    
    
                            SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["registrationConnectionString"].ConnectionString);
                            conn.Open();
                            string insertQuery = "insert into [reg] (Name, Email, Gender, Country, Programs) values(@name, @email, @gender, @country, @programs)";
                            SqlCommand com = new SqlCommand(insertQuery, conn);
                            
                            com.Parameters.AddWithValue("@name", TextBoxName.Text);
                            com.Parameters.AddWithValue("@email", TextBoxEmail.Text);
                            com.Parameters.AddWithValue("@gender", RadioButtonListGender.Text);
                            com.Parameters.AddWithValue("@country", DropDownListCountry.SelectedItem.ToString());
                            com.Parameters.AddWithValue("@programs", str);
    
                            com.ExecuteNonQuery();
    
                            
                            Response.Write("<script>alert('done!')</script>");
                            //HttpContext.Current.Response.Redirect(ResolveUrl("Manager.aspx"), false);
                            //HttpContext.Current.Server.Transfer("Manager.aspx");
                            Server.Transfer("Registration.aspx");
                            conn.Close();
            }
            catch(Exception ex) {
                Response.Write("Error" + ex.ToString());
            }
        }
    }

    19 марта 2017 г. 17:28

Ответы

  • Попробуйте вынесети Server.Transfer("Manager.aspx") за пределы вашего try/catch.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа resrorator 19 марта 2017 г. 19:22
    19 марта 2017 г. 19:15
    Модератор
  • Уберите Server.Transfer из try или перестаньте ловить все исключения. 

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа resrorator 19 марта 2017 г. 20:56
    19 марта 2017 г. 20:34
    Модератор

Все ответы

  • Вам исправить код или убрать исключение?

    Если исправить, то весь этот ужасный код выбросить, переделать все для работы через REST любыми удобными средствами.

    Убрать исключение - видимо закрыть соединение до трансфера (который завершает текущий ответ), не ловить все исключения. Можно так же попробовать сохранить текущую форму передав true трансферу вторым параметром.

    Так же вас очень легко взломать, в TextBoxName можно писать любые SQL запросы. 


    This posting is provided "AS IS" with no warranties, and confers no rights.

    19 марта 2017 г. 18:11
    Модератор
  • Я делал по видеокурсу в youtube для лабораторной в университете, но много чего в код пришлось добавлять самому в соответствии с заданием. Так что цель этого проекта, один раз отработать без ошибок и забыться.

    Добавил true, но проблема не ушла...или я что-то не так сделал?

    Server.Transfer(("Manager.aspx"), true);
    также закрыл соединение до трансфера
     conn.Close();
    Response.Write("<script>alert('done!')</script>");
                            
    
    Server.Transfer("Manager.aspx");
    и попробовал скомбинировать


    • Изменено resrorator 19 марта 2017 г. 18:30
    19 марта 2017 г. 18:24
  • Попробуйте вынесети Server.Transfer("Manager.aspx") за пределы вашего try/catch.

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа resrorator 19 марта 2017 г. 19:22
    19 марта 2017 г. 19:15
    Модератор
  • Спасибо, помогло!

    Такое же исключение появляется в этом участке, если не выбрать ни один из checkbox. В этом случае как быть?

    //Если не выбран ни один чекбокс выводим сообщение
                int count = 0;
                    for (int i = 0; i < CheckBoxListPrograms.Items.Count; i++)
                    {
                        if (CheckBoxListPrograms.Items[i].Selected)
                             count++;
                    }
    
                    if (count == 0) {
                        Response.Write("<script>alert('select at least one program')</script>");
                        Server.Transfer("Registration.aspx");
                    }



    • Изменено resrorator 19 марта 2017 г. 20:07
    19 марта 2017 г. 19:24
  • Уберите Server.Transfer из try или перестаньте ловить все исключения. 

    This posting is provided "AS IS" with no warranties, and confers no rights.

    • Помечено в качестве ответа resrorator 19 марта 2017 г. 20:56
    19 марта 2017 г. 20:34
    Модератор
  • Изначально не понял, что значит "не ловить исключения"...спасибо разобрался!)
    19 марта 2017 г. 20:56