ユーザーが[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
これは私の最初の投稿です。事前に十分明確でない場合はお詫び申し上げます。
他のページにリダイレクトすると、リダイレクト先の新しいページが実行されてブラウザに送信されるため、次のコードは決して実行されません(少なくとも結果は表示されません)。他に何を期待しましたか?あなたのリダイレクションが_同じページ_に行く場合でも、そのページの_新しいリフレッシュ_を作成し、以前の実行コンテキストが起こらなかったかのようにpage_loadイベントから実行を開始します。私はあなたがリダイレクトする必要はないと思う。あなたがページを完成させるだけならば、グリッドに結びついてしまいます。たぶん、ASP.NETのページライフサイクルを勉強する必要があるかもしれない – ADyson
私が言ったように、私はASP.NETにはまったく新しいもので、私の頭を振る舞いに巻き込むように努力しています。リダイレクトを削除して問題が解決するかどうかを確認します。 – KBatz