2013-08-08 5 views
1

Я создал главную страницу. И я создал страницу по умолчанию с именем default.aspx. Файл defult aspx имеет все стандартные контент и идентификаторы. В ID я сделал тег div для хранения содержимого для динамической страницы.Динамически связанные страницы ASP.NET

<%@ 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> 

Это все хорошо. Поэтому, используя SQL Server express, который поставляется с Visual Studio 2012, я создал таблицу с данными в ней. В entitys в таблице ProductID Наименование Цена Количество

Сейчас на странице 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 я делаю каждое имя в гиперссылках таблицы в другой файл apsx с именем Link1.

Я использовал тот же код, что и выше, но изменил несколько вещей в 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 и отобразит только информацию об этом имени (Info in table). Это не происходит из-за сбоя программы. Я использовал все свои базовые знания отладки.

Пожалуйста, помогите

ответ

0

В default.aspx.vb у вас есть:

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

передавая имя, как PRODID для PRODID вы передаете имя и link1.aspx.В.Б вы запрашиваете как:

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() & ">" & 
0

Во-первых, посмотрите SqlParameters, потому что вы только что открыли свой код до SQL инъекции, передавая параметры в QueryString.

Для решения вашего вопроса, я думаю, что проблема заключается в этой строке:

"<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>" & _

Тонкое различие, но это должно заставить его работать.

Наконец, всегда выполняйте нулевую/пустую проверку строки в QueryString, прежде чем вы вызовете .ToString(). Сравните свою запись QueryString с использованием String.IsNullOrWhiteSpace(), а затем продолжите обработку, когда String.IsNullOrWhiteSpace() возвращает false.

Смежные вопросы