2017-01-01 2 views
0

Я застрял - первая часть кода «// OPEN PRELOADING PAGE« по какой-то причине не будет выполнена и будет пропущена. Если я прокомментирую остальную часть кода и сохраняю только эту часть, она работает. Что не так?C# Пропуск частей кода

protected void Create_Order_Click(object sender, EventArgs e) 
{ 

    // OPEN PRELOADING PAGE 
    Response.Write("<script>"); 
    Response.Write("window.open('smth.aspx','_blank')"); 
    Response.Write("</script>"); 

    // DEFINE CONNECTION 
    SqlConnection conn = new SqlConnection(ConfigurationManager 
      .ConnectionStrings["SqlConnectionString"].ConnectionString); 

    // OPEN CONNECTION 
    conn.Open(); 

    // DEFINE FIRST SQL QUERY 
    string insertOrder = "INSERT INTO Order_Connection (FK_User_ID) VALUES ('" + Session["User_ID"] + "')"; 

    string str = FileUpload1.FileName; 
    FileUpload1.PostedFile.SaveAs(Server.MapPath(".") + "//upload//" + str); 
    string path = "//xxx.cz/intranet/pages/upload/" + str.ToString(); 

    string insertOrder_Content = "INSERT INTO Order_Content (Uploaded_Photo, Issue_Description, Place_Of_Repair, Transfer_Method, Date_To_Bring, Date_To_Take) VALUES ('" + path + "', @Issue_Description, @Place_Of_Repair, @Transfer_Method, @Date_To_Bring, @Date_To_Take)"; 
    SqlCommand comInsertIntoOrder = new SqlCommand(insertOrder_Content, conn); 

    comInsertIntoOrder.Parameters.AddWithValue("@Issue_Description", TextBox_Issue_Description.Text); 
    comInsertIntoOrder.Parameters.AddWithValue("@Place_Of_Repair", DropDownList_Place.SelectedItem.ToString()); 
    comInsertIntoOrder.Parameters.AddWithValue("@Transfer_Method", DropDownList_Transfer.SelectedItem.ToString()); 
    comInsertIntoOrder.Parameters.AddWithValue("@Date_To_Bring", TextBox_Date_To_Bring.Text); 
    comInsertIntoOrder.Parameters.AddWithValue("@Date_To_Take", TextBox_Date_To_Take.Text); 

    comInsertIntoOrder.ExecuteNonQuery(); 

    // EXECUTE FIRST SQL QUERY 
    SqlCommand com = new SqlCommand(insertOrder, conn); 

    // EXECUTE NOW 
    com.ExecuteNonQuery(); 

    // CLOSE CONNECTION 
    conn.Close(); 

    Response.Redirect("http://xxx.cz/intranet/pages/Success.aspx"); 
} 
+0

У вас есть уязвимость в SQL-инъекции. – SLaks

+0

Перенаправления не могут получить ответ. – SLaks

+0

Что такое smth.aspx? У вас много кода? – CodingYoshi

ответ

7

Вы вызываете Response.Redirect в конце метода. Это приведет к прекращению запроса с ответом 302. Данные, которые вы ранее написали на (буферизованный) ответ, в данный момент неактуальны.

Кроме того, вы должны изучить параметризованный SQL - ваша обработка базы данных в настоящее время уязвима для атак SQL-инъекций. (Всегда, всегда, всегда параметризуйте свой SQL, в основном.)

+0

Благодарим вас за ответ, возможно, вы также можете помочь мне сделать это правильно (перенаправить часть). Сначала мне нужно открыть «smth.aspx» на _blank, затем выполнить оставшуюся часть кода на исходной странице, и как только это будет сделано, перенаправите исходную страницу на «http://xxx.cz/intranet/pages/Success.aspx « –

+0

@ MartinHlavačka: Похоже, вам в основном нужно узнать больше об HTTP - вы говорите о нескольких запросах и ответах в этот момент. Вероятно, вы хотите отправить полный ответ, который открывает другую страницу, а также обращается к серверу с помощью Javascript для проверки состояния части SQL. –

0

Вы пытаетесь достичь двух вещей здесь;

  1. Открыть новую вкладку и нагрузка «smth.aspx»
  2. Перенаправление запрос success.aspx

На сервере Response.Redirect отправляет обратно браузеру только 302 Response что-то вроде этого HTTP/1.1 302 Found Location: http://xxx.cz/intranet/pages/Success.aspx и затем браузер отправляет другой запрос на страницу success.aspx. Но вы ожидаете smith.aspx на новой вкладке с success.aspx на странице, которая не произойдет, поскольку сервер никогда не отправил ваш тег сценария в браузер. Если это то, что вы хотите сделать, попробуйте этот код;

Response.Write("<script>"); 
Response.Write("window.open('smth.aspx','_blank')"); 
Response.Write("window.location.href='success.aspx';"); 
Response.Write("</script>"); 
.... //remaining code 
//Remove the Response.Redirect line at the end of your function. 
Смежные вопросы