2017-07-25 25 views
2

ユーザーが[Submit]ボタンを使用してSQLデータベースに保存するテキストボックスを入力するページがあります。このページには添付ファイルをアップロードするためのボタンもあります。ユーザーが送信ボタンをクリックして他のデータを保存する前に添付ファイルをアップロードすると、アップロードルーチンがResponse.Redirect(Request.Url.AbsoluteUri)を実行すると、テキストボックスの値がクリアされます。私はセッションに復元したい値を保存しようとしましたが、復元できないようです。デバッガには表示されていますが、Response.Redirectが実行されると、次の行は実行されません。私はASP.NETの初心者ですから、明らかに何かが欠けているかもしれません。Response.Redirect(Request.Url.AbsoluteURI)すべてのユーザーエントリを消去します

Protected Sub Upload(sender As Object, e As EventArgs) Handles btnUpload.Click 
    Session("Phone") = txtPhone.Text 
    Session("Name") = txtName.Text 
    Session("Email") = txtEmail.Text 
    Session("StartDate") = txtStartDate.Text 
    Session("EndDate") = txtEndDate.Text 
    Session("Subject") = txtSubject.Text 
    Session("Description") = txtDescription.Value 
    Dim filename As String = Path.GetFileName(FileUpload1.PostedFile.FileName) 
    Dim contentType As String = FileUpload1.PostedFile.ContentType 
    Using fs As Stream = FileUpload1.PostedFile.InputStream 
     Using br As New BinaryReader(fs) 
      Dim bytes As Byte() = br.ReadBytes(fs.Length) 
      Dim constr As String = ConfigurationManager.ConnectionStrings("EngineeringRequestsConnectionString").ConnectionString 
      Using con As New SqlConnection(constr) 
       Dim query As String = "insert into Attachments values (@id, @Name, @ContentType, @Data)" 
       Using cmd As New SqlCommand(query) 
        cmd.Connection = con 
        cmd.Parameters.Add("@id", SqlDbType.Int).Value = nextId 
        cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = filename 
        cmd.Parameters.Add("@ContentType", SqlDbType.NVarChar).Value = contentType 
        cmd.Parameters.Add("@Data", SqlDbType.VarBinary).Value = bytes 
        con.Open() 
        cmd.ExecuteNonQuery() 
        con.Close() 
       End Using 
      End Using 
     End Using 
    End Using 
    hasUpload = True 
    Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri) 
    BindGrid() 

End Sub 

BindGrid()プロシージャは、Sessionから値を復元しようとしますが、決して実行されません。

If hasUpload Then 
     txtPhone.Text = CType(Session("Phone"), String) 
     txtName.Text = CType(Session("Name"), String) 
     txtStartDate.Text = CType(Session("StartDate"), String) 
End If 

これは私の最初の投稿です。事前に十分明確でない場合はお詫び申し上げます。

+0

他のページにリダイレクトすると、リダイレクト先の新しいページが実行されてブラウザに送信されるため、次のコードは決して実行されません(少なくとも結果は表示されません)。他に何を期待しましたか?あなたのリダイレクションが_同じページ_に行く場合でも、そのページの_新しいリフレッシュ_を作成し、以前の実行コンテキストが起こらなかったかのようにpage_loadイベントから実行を開始します。私はあなたがリダイレクトする必要はないと思う。あなたがページを完成させるだけならば、グリッドに結びついてしまいます。たぶん、ASP.NETのページライフサイクルを勉強する必要があるかもしれない – ADyson

+0

私が言ったように、私はASP.NETにはまったく新しいもので、私の頭を振る舞いに巻き込むように努力しています。リダイレクトを削除して問題が解決するかどうかを確認します。 – KBatz

答えて

1

ASP.NET Webフォームを初めてお使いの場合は、Page Lifecycleをチェックする価値があります。これは、ページのロード時にイベントが発生する順序を決定するためです。問題は、あなたが効果的にページBにページAからユーザーを取っていますが、ブラウザはにリダイレクトされますResponse.Redirect()を呼び出すときにそれらをあなたの方法

Protected Sub Upload(sender As Object, e As EventArgs) Handles btnUpload.Click 
    .. skip .. 
    Response.Redirect(HttpContext.Current.Request.Url.AbsoluteUri) 
    BindGrid() 

でページA.

の結果を見ることを期待しているということです新しいページ(例:A→B)は、ページのライフサイクルをもう一度開始します。Response.Redirect()の後に起こるものはレンダリングされません。私はあなたが(A - > A)からリダイレクトしているということを混乱させていると思いますが、それでもページがリロードされます。

1つの方法は、BindGrid()を呼び出して、ページのロードイベントの1つでセッションからデータをリロードするか、またはResponse.Redirect()への呼び出しを一括して削除し、そのままにします。

+0

ありがとう!それは私にこの仕事を得るために必要な情報を得ました。ここに新しいブランドとして、私はこれをアップヴォートすることはできません。 – KBatz

+0

@KBatzあなたは – ADyson

+0

が好きだとしても、受け入れられた回答としてマークすることはできますが、最初はそのオプションを忘れました。今すぐ入手してください。 – KBatz

関連する問題