动态链接页面ASP.NET

时间:2013-08-08 22:16:44

标签: asp.net vb.net

我创建了一个母版页面。我创建了一个名为default.aspx的默认页面.defult aspx文件包含所有标准内容和ID。在ID中我创建了一个div标签来保存动态页面的内容。

<%@ Page Title="" Language="vb" AutoEventWireup="false" MasterPageFile="~/Site.Master"         CodeBehind="Default.aspx.vb" Inherits="P03_S02.Link1" %>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <div id="DynPage" runat="server"></div>
</asp:Content>

这一切都很好。因此,通过使用Visual Studio 2012附带的SQL Server express,我创建了一个包含数据的表。表中的实体是     产品ID     名称     价钱     数量

现在在default.aspx.vb页面中,我完成了以下代码。

Imports System.Data
Imports System.Data.SqlClient
Public Class Catelog
Inherits System.Web.UI.Page

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not Page.IsPostBack Then
        Dim Connection As SqlConnection
        Dim Command As SqlCommand
        Dim Reader As SqlDataReader
        Connection = New SqlConnection("Data Source=(LocalDB)\v11.0;AttachDbFilename=|DataDirectory|\Products.mdf;Integrated Security=True")
        Dim CommandString As String
        CommandString = "SELECT * FROM Product"
        Command = New SqlCommand(CommandString)
        Command.CommandType = CommandType.Text
        Command.Connection = Connection
        Command.Connection.Open()
        Command.ExecuteNonQuery()
        Reader = Command.ExecuteReader(CommandBehavior.CloseConnection)

        Dim ProductList As String
        If Reader.HasRows Then
            ProductList &= "<table width=""100%"">"
            ProductList &= " <tr bgcolor=""#00CCFF"">"
            ProductList &= "<td><b>ID</b></td>"
            ProductList &= "<td><b>Product</b></td>"
            ProductList &= "<td><b>Price</b></td>"
            ProductList &= "<td><b>Quantity</b></td>"
            ProductList &= "</tr>"
            While Reader.Read
                Dim newProduct As String
                ProductList &= "<tr>"
                ProductList &= "<td>" & Reader("ProductID") & "</td>" & _
                "<td>" & "<a href=""Link1.aspx?ProdID=""" & Reader("Name") & ">" &      Reader("Name") & "</a>" & "</td>" & _
                    "<td>" & Reader("Price") & "</td>" & _
                    "<td>" & Reader("Quantity") & "</td>"
                    ProductList &= "</tr>"
                End While
                ProductList &= "</table>"
            End If
            Catelog.InnerHtml = ProductList
            Command.Connection.Close()
       '    Command.Dispose()
            Connection.Dispose()
            ProductCatelog.InnerHtml = ProductList
        End If
    End Sub

End Class

如您所见,该表将显示表中的所有数据。在while循环中,我将表中的每个名称超链接到另一个名为Link1的apsx文件。

我使用了与上面相同的代码,但改变了Link1.aspx.vb中的一些内容

添加了:

  Dim ProductID As String
  ProductID = Request.QueryString("ProdID").ToString()'problem possible here

更改了数据显示:

     Dim ProductList As String
        If Reader.HasRows Then
            ProductList &= "<table width=""100%"">"
            ProductList &= " <tr bgcolor=""#00CCFF"">"
            ProductList &= "<td><b>Product</b></td>"
            ProductList &= "<td><b>Price</b></td>"
            ProductList &= "<td><b>Quantity</b></td>"
            ProductList &= "</tr>"
            While Reader.Read
                Dim newProduct As String
                ProductList &= "<tr>"
                ProductList &= "<td>" & Reader("Name") & "</td>" & _
                    "<td>" & Reader("Price") & "</td>" & _
                    "<td>" & Reader("Quantity") & "</td>"
                ProductList &= "</tr>"
            End While
            ProductList &= "</table>"
        End If

使用以下内容仅显示一条记录:

        Dim CommandString As String
        CommandString = "SELECT * FROM Product where ProductID =" & ProductID

我的目标是,如果您点击名称,它会将其链接到Link1.aspx并仅显示有关该名称的信息(表格中的信息)。这不会发生,因为程序崩溃了。我已经使用了所有基本的调试知识。

2 个答案:

答案 0 :(得分:0)

首先,查看SqlParameters,因为您刚刚通过在QueryString中传递参数而将代码打开到SQL注入。

为了解决你的问题,我认为问题在于这一行:

"<td>" & "<a href=""Link1.aspx?ProdID=""" & Reader("Name") & ">" & Reader("Name") & "</a>" & "</td>" & _

您过早关闭双引号并且没有将productId放入href内。

我会像这样重写:

"<td>" & "<a href=""Link1.aspx?ProdID=" & Reader("Name") & """>" & Reader("Name") & "</a>" & "</td>" & _

微妙的差异,但它应该使它工作。

最后,在调用.ToString()之前,始终对QueryString执行null /空字符串检查。使用QueryString比较您的String.IsNullOrWhiteSpace()条目,然后仅在String.IsNullOrWhiteSpace()返回false时继续处理。

答案 1 :(得分:0)

在default.aspx.vb中你有:

"<td>" & "<a href=""Link1.aspx?ProdID=""" & Reader("Name") & ">" &      Reader("Name") & "</a>" & "</td>" & _

将名称传递为ProdID 对于ProdID,您传递名称,在link1.aspx.vb中,您要查询:

Dim ProductID As String
ProductID = Request.QueryString("ProdID").ToString()'problem possible here 

以后:

Dim CommandString As String
CommandString = "SELECT * FROM Product where ProductID =" & ProductID

期待ProdID,而不是名字。

因此,在default.aspx.vb中,您应该将行更改为:

<td>" & "<a href=""Link1.aspx?ProdID=""" & Reader("ProdID").ToString() & ">" &