2017-01-01 17 views
0

コード "// OP 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

あなたの答えをありがとう、もしかすると助けてくれますか(リダイレクト部分)。私は最初に_blankに 'smth.aspx'を開いて、元のページにコードの残りの部分を実行し、それが完了したら元のページを "http://xxx.cz/intranet/pages/Success.aspx"にリダイレクトする必要があります" –

+0

@MartinHlavačka:基本的にHTTPについて学ぶ必要があるように思えます。つまり、その時点で複数のリクエストと応答について話しています。他のページを開き、Javascriptを使用してサーバーにコールしてSQL部分の状態をチェックする完全な応答を送信することもできます。 –

0

ここでは2つのことを達成しようとしています。

  1. 新しいタブを開くとロード「smth.aspx」
  2. はResponse.RedirectをサーバがブラウザにこのHTTP/1.1 302 Found Location: http://xxx.cz/intranet/pages/Success.aspxなどだけ302 Response何かを送り返すには

を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. 
関連する問題