Response.Redirect 使用查询字符串

Posted

技术标签:

【中文标题】Response.Redirect 使用查询字符串【英文标题】:Response.Redirect using query string 【发布时间】:2013-03-11 20:57:53 【问题描述】:

好的,我刚刚编写了自己的“将一本书添加到数据库”ASP.net 页面,如下所示:

<div class="addbook"><br />If you feel that we&#39;ve forgotten a book
that you love, please fill out this form 
below to help us keep the site fresh and dynamic!
<h3>Title:</h3><asp:TextBox ID="tb_booktitle" runat="server"></asp:TextBox>
<h3>Author:</h3><asp:TextBox ID="tb_bookauthor" runat="server"></asp:TextBox>
<h3>Publication Date:</h3><asp:TextBox ID="tb_bookpubyear" runat="server" ></asp:TextBox>    <asp:CompareValidator
ID="CompareValidatorTextBox1" runat="server"
ControlToValidate="tb_bookpubyear"
Type="Date"
Operator="DataTypeCheck" 
ErrorMessage="Date must be in the DD/MM/YYYY format)" ForeColor="Red"
/>
<h3>Number of Pages:</h3><asp:TextBox ID="tb_bookpages" runat="server"></asp:TextBox><asp:RangeValidator ID="RangeValidator1" runat="server" 
    ControlToValidate="tb_bookpages" 
    ErrorMessage="Please enter a number." ForeColor="Red" 
    MaximumValue="9999999" MinimumValue="1" SetFocusOnError="True"></asp:RangeValidator>


<h3>Publisher:</h3><asp:TextBox ID="tb_publisher" runat="server"></asp:TextBox>
<h3>Book Cover:</h3>
<asp:FileUpload ID="fu_picture" runat="server" />
<h3>Your Rating:</h3>
<p>    
    <asp:RadioButtonList ID="rbl_Stars" runat="server" 
    RepeatDirection="Horizontal" Width="142px">
    <asp:ListItem>1</asp:ListItem>
    <asp:ListItem>2</asp:ListItem>
    <asp:ListItem>3</asp:ListItem>
    <asp:ListItem>4</asp:ListItem>
    <asp:ListItem>5</asp:ListItem>
</asp:RadioButtonList>
</p>
<p>
    <asp:Button ID="btn_submission" runat="server" Text="Upload Book!" />
</p>

以及背后的代码:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

End Sub

Protected Sub btn_submission_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btn_submission.Click
    Dim myGUID = Guid.NewGuid()

    Dim newFileName As String = myGUID.ToString() & ".jpg"
    Dim fileLocationOnServerHardDisk = Request.MapPath("img/thumb") & "/" & newFileName
    fu_picture.SaveAs(fileLocationOnServerHardDisk)
    Dim oleDbConn As New OleDb.OleDbConnection(ConfigurationManager.ConnectionStrings("BookMeetConnString").ConnectionString)
    Dim SqlString As String = "Insert into booklist(Title,Author,PublicationDate,Pages,Publisher,imgurl,AverageRating)
Values (@f1,@f2,@f3,@f4,@f5,@f6,@f7)"
    Dim cmd As OleDbCommand = New OleDbCommand(SqlString, oleDbConn)
    cmd.CommandType = CommandType.Text
    cmd.Parameters.AddWithValue("@f1", tb_booktitle.Text)
    cmd.Parameters.AddWithValue("@f2", tb_bookauthor.Text)
    cmd.Parameters.AddWithValue("@f3", tb_bookpubyear.Text)
    cmd.Parameters.AddWithValue("@f4", tb_bookpages.Text)
    cmd.Parameters.AddWithValue("@f5", tb_publisher.Text)
    cmd.Parameters.AddWithValue("@f6", "img/thumb/" & newFileName)
    cmd.Parameters.AddWithValue("@f7", rbl_Stars.SelectedValue)
    oleDbConn.Open()
    cmd.ExecuteNonQuery()
    Response.Redirect("detail.aspx?ID=0")

End Sub

Protected Sub rbl_Stars_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles rbl_Stars.SelectedIndexChanged

End Sub 
End Class

正如您在上面的代码中看到的那样,一旦建立了与数据库的连接,我想使用显示刚刚添加的记录的查询字符串。但我收到这样的错误:

输入字符串的格式不正确。描述:一个未处理的 执行当前 Web 请求期间发生异常。 请查看堆栈跟踪以获取有关错误的更多信息和 它起源于代码。

异常详细信息:System.FormatException:输入字符串不在 格式正确。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[FormatException:输入字符串的格式不正确。] System.Number.StringToNumber(String str, NumberStyles 选项, NumberBuffer& 数字, NumberFormatInfo 信息, Boolean parseDecimal) +10722195 System.Number.ParseInt32(String s, NumberStyles 样式, NumberFormatInfo 信息) +145 System.String.System.IConvertible.ToInt32(IFormatProvider 提供程序) +46 System.Convert.ChangeType(Object value, TypeCode typeCode, IFormatProvider provider) +297 System.Web.UI.WebControls.Parameter.GetValue(对象值,字符串 defaultValue, TypeCode 类型, Boolean convertEmptyStringToNull, Boolean 忽略NullableTypeChanges) +126 System.Web.UI.WebControls.Parameter.GetValue(对象值,布尔值 忽略NullableTypeChanges) +63 System.Web.UI.WebControls.Parameter.get_ParameterValue() +40 System.Web.UI.WebControls.ParameterCollection.GetValues(HttpContext 上下文,控制控制)+247 System.Web.UI.WebControls.SqlDataSourceView.InitializeParameters(DbCommand 命令、ParameterCollection 参数、IDictionary excludeList) +257 System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments 论据)+589 System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback 回调)+21 System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138 System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30 System.Web.UI.WebControls.GridView.DataBind() +4 System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +105 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.EnsureChildControls() +83 System.Web.UI.Control.PreRenderRecursiveInternal() +42 System.Web.UI.Control.PreRenderRecursiveInternal() +168 System.Web.UI.Control.PreRenderRecursiveInternal() +168 System.Web.UI.Control.PreRenderRecursiveInternal() +168 System.Web.UI.Control.PreRenderRecursiveInternal() +168 System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +974

我将如何实现我想要做的事情?

【问题讨论】:

一方面,您的 Response.Redirect 并未指明 0 所指的内容。您需要提供该信息的第二个参数。 ID 是什么?它来自哪里? ID 是我数据库中“booklist”表中的一个字段(连接字符串称为 BookMeetConnString) 我选择了这样的东西:Response.Redirect("detail.aspx?ID=" & Request.QueryString("ID"))。重定向有效,但 URL 中的查询字符串值为空白(即“localhost:65458/detail.aspx?ID=") 【参考方案1】:

为什么不创建一个存储过程,其输出参数为新插入的书的 id,然后执行以下操作

If outputparam.value isnot nothing then
    Response.Redirect(String.Format("detail.aspx?ID=0",outputparam.value)
end if

请查看此网址了解更多信息。

Input and Output Parameters, and Return Values

【讨论】:

谢谢,我最后实现了类似的东西!

以上是关于Response.Redirect 使用查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

Response.Redirect 适用于 Visual Studio,但不适用于 IIS

Response.Write 和 Response.redirect 不可同时使用

Response.Redirect和Server.Transfer比较--(转)

Server Transfer()和Response.Redirect()的使用

response.redirect 用法

asp怎样用response.Redirect进行页面跳转。