Mark Dixon 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings.
-
Upload
hortense-lester -
Category
Documents
-
view
215 -
download
0
Transcript of Mark Dixon 1 19 – Passing Data between pages: Forms, Sessions, & Query Strings.
Mark Dixon 1
19 – Passing Data between pages:Forms, Sessions, & Query Strings
Mark Dixon 2
Session Aims & Objectives• Aims
– To introduce the fundamental ideas involved in passing data between pages
– Highlight modular design techniques, and demonstrate them in ASP
• Objectives,by end of this week’s sessions, you should be able to:
– pass data between pages, using:• Self Posting• Query Strings• Session Variables
– use procedures, functions, parameters, and modules (shared VB files) in ASP.Net
Mark Dixon 3
Example: Logon v2 (design)• Restrict access to
home page
Mark Dixon 4
Example: Logon v2 (code)<%@ Page Language="VB" %><script runat="server"> Sub btnLogon_Click(s As Object, e As EventArgs) Handles btnLogon.ServerClick Dim un As String Dim pw As String un = txtUserName.Value pw = txtPassWord.Value If un = "mark" And pw = "soft131" Then Response.Redirect("home.htm") Else msg.innerText = "Login details incorrect." End If End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> Please logon:<br /> <input id="txtUserName" type="text" runat="server" /><br /> <input id="txtPassWord" type="text" runat="server" /><br /> <input id="btnLogon" type="submit" value="Logon" runat="server" /> <p id="msg" runat="server"></p> </form> </body></html>
Logon2.aspx
<html> <head><title>My Home page</title></head> <body> <p> Welcome to my home page.<br /> <img src="YouAreHere.jpg" /> </p> </body></html>
Home.htm
Mark Dixon 5
Example: Logon (Fixed Problem)• View Source – shows client-side script:
No server-side code
Mark Dixon 6
Example: Logon (Problem 2)• User can type home page url (address)
directly (bypassing logon page)
Mark Dixon 7
Solution• Need way for:
– password page to tell home page
– that user logged in OK
Mark Dixon 8
Technique: Dead-Drop Variables• 2 Spies wish to pass message between
each other without actually meeting
• Arrange a dead-drop location– one spy leaves message at location– other spy visits location later to pick up
message
• Variables used as dead-drop containers
Mark Dixon 9
<%@ Page Language="VB" %><script runat="server">Dim LogonOK As Boolean Sub btnLogon_Click(s As Object, e As EventArgs) Handles btnLogon.ServerClick Dim un As String Dim pw As String LogonOK = False un = txtUserName.Value pw = txtPassWord.Value If un = "mark" And pw = "soft131" Then LogonOK = True Response.Redirect("home3.aspx") Else msg.innerText = "Login details incorrect." End If End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> Please logon:<br /> <input id="txtUserName" type="text" runat="server" /><br /> <input id="txtPassWord" type="text" runat="server" /><br /> <input id="btnLogon" type="submit" value="Logon" runat="server" /> <p id="msg" runat="server"></p> </form> </body></html>
Logon3.aspx
Example: Logon v3 (code)
<%@ Page Language="VB" %><script runat="server">Dim LogonOK As Boolean Sub Page_Load() If LogonOK = False Then Response.Redirect("Logon3.aspx") End If End Sub
</script><html> <head><title>My Home page</title></head> <body> <p> Welcome to my home page.<br /> <img src="YouAreHere.jpg" /> </p> </body></html>
Home3.aspx
Does not work: always redirect to logon Variables do not persist between pages
LogonOK True
Mark Dixon 10
Example: Logon v3 (Error)• Variables – don't persist between pages
Mark Dixon 11
Passing Data (temporary)
• Session object– used to pass information between pages:
– exists for current session– persist between pages– clears if user closes browser– clears after 20 mins of inactivity– no need for declaration
Session("Thing") = 91
Put 91 into Thing
Mark Dixon 12
Maintaining State: Session Object<%@ Page Language="VB" %><script runat="server"> Sub btnSend_Click(s As Object, e As EventArgs) Handles btnSend.ServerClick Session("MSG") = "Meet in BGB202" End Sub Sub btnClear_Click(s As Object, e As EventArgs) Handles btnClear.ServerClick Session.Abandon() End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> <input id="btnSend" type="submit" value="Send" runat="server" /> <input id="btnClear" type="submit" value="Clear" runat="server" /> <p><a href="Display.aspx">Display</a></p> </form> </body></html>
Send.aspx
• Session variable– all variants– no declaration
• Abandon method– deletes all
session variables
Mark Dixon 13
Maintaining State: Session Object
<%@ Page Language="VB" %><script runat="server"> Sub Page_Load() parMsg.InnerText = Session("MSG") End Sub</script>
<html> <head><title></title></head> <body> <p id="parMsg" runat="server"></p> </body></html>
Display.aspx
• read session variable, and display in parMsg
Mark Dixon 14
Example: Message• Using Session variable:
<%@ Page Language="VB" %><script runat="server"> Sub btnSend_Click(s As Object, e As EventArgs) Handles btnSend.ServerClick Session("MSG") = "Meet in BGB202" End Sub Sub btnClear_Click(s As Object, e As EventArgs) Handles btnClear.ServerClick Session.Abandon() End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> <input id="btnSend" type="submit" value="Send" runat="server" /> <input id="btnClear" type="submit" value="Clear" runat="server" /> <p><a href="Display.aspx">Display</a></p> </form> </body></html>
Send.aspx
<%@ Page Language="VB" %><script runat="server" language="VB"> Sub Page_Load() parMsg.InnerText = Session("MSG") End Sub</script>
<html> <head><title></title></head> <body> <p id="parMsg" runat="server"></p> </body></html>
Display.aspx
MSG Meet in BGB202
Mark Dixon 15
Questions: Session Variables• Write a line of VB code to put the number 74
into a session variable called id.
• Write VB code that displays 'Hello' in parMsg if the session variable called id is equal to 74
Session("id") = 74
If Session("id") = 74 Then
parMsg.InnerText = "Hello"
End If
Mark Dixon 16
Passing Data (temporary)
• Query Strings– Useful for passing information between pages
via links
Mark Dixon 17
Maintaining State: Query Strings• Data added to end of URL (address):
http://localhost/page.asp?Surname=Bob
• ASP code can use this data:– Request.QueryString("Surname")
• would return the value "Bob"
• Form method=get– data automatically added to query string
Query String
Mark Dixon 18
Example: Date-Time<html> <head> </head> <body> <p>What background colour do you want for you date information? <br><a href=DateTime.aspx?Colour=yellow>Yellow</a> <br><a href=DateTime.aspx?Colour=cyan>Light Blue</a> </body></html>
Menu.aspx
<%@ Page Language="VB" %><script runat="server"> Sub Page_Load() Dim colour As String colour = Request.QueryString("Colour") PageBody.Style.Add("background-color", colour) parD.InnerHtml = "The date is " + Now().ToString("dd MMM yyyy") + "." parT.InnerHtml = "The time is " + Now().ToString("HH:mm") + "." End Sub</script>
<html> <head> </head> <body id="PageBody" runat="server"> <p id="parD" runat="server"></p> <p id="parT" runat="server"></p> </body></html>
DateTime.aspx
Mark Dixon 19
Reference: Server Object Model• Request object: calling web page
– QueryString: used to get data from address (?)
• Response object: web page sent back– Redirect: used to navigate to other page
• Session object: store data between pages– Abandon: clears session data
Mark Dixon 20
Passing Data (persistent)
• Cookies (not covered in this module)– stored on users’ (client) hard drive– persists between sessions
• Database/file (covered in later lectures)– stored on server hard drive– persists between sessions
Mark Dixon 21
Example: Apples (analysis)SPECIFICATION
• User Requirements – help young children learn to count from 1 to 10
• Software Requirements– Functional:
–computer selects number between 1 and 10–computer displays that number of apples–user (child) types digits–computer compares digits to number of apples
– Non-functionalshould be easy to use and interesting
Mark Dixon 22
Example: Apples v2 (design)• Functionality:
• computer selects number between 1 and 10• computer displays that number of apples• user types digits• computer compares digits to number of apples
Mark Dixon 23
Data Representation• Stored data vs. display
– display: seven images of apples(easier for people to understand)
– Stored data: 7(easier to process)
<img src=‘apple.gif />
<img src=‘apple.gif />
<img src=‘apple.gif />
<img src=‘apple.gif />
<img src=‘apple.gif />
<img src=‘apple.gif />
<img src=‘apple.gif />
Dim numApples As Integer
h = ""
For a = 1 To numApples
h = h & "<img src='Apple.gif'>"
Next
quest.InnerHtml = h
Mark Dixon 24
Example: Apples v2 (code)<%@ Page Language="VB" %><script runat="server">Dim n As Long
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim html As String Dim a As Long n = 1 + Int(Rnd() * 9) html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html session("numApples") = n End Sub Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick n = session("numApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> <p id="quest" runat="server"></p> <input id="btnStart" type="submit" value="Start" runat="server" /> <input id="txtAns" type="text" runat="server" /> <input id="btnCheck" type="submit" value="Check" runat="server" /> <p id="msg" runat="server"></p> </form> </body></html>
Apples.aspx
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim html As String Dim a As Long n = 1 + Int(Rnd() * 9) html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html session("numApples") = n End Sub
Mark Dixon 25
Example: Apples v2 (code)<%@ Page Language="VB" %><script runat="server">Dim n As Long
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim html As String Dim a As Long n = 1 + Int(Rnd() * 9) html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html session("numApples") = n End Sub Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick n = session("numApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> <p id="quest" runat="server"></p> <input id="btnStart" type="submit" value="Start" runat="server" /> <input id="txtAns" type="text" runat="server" /> <input id="btnCheck" type="submit" value="Check" runat="server" /> <p id="msg" runat="server"></p> </form> </body></html>
Apples.aspx
Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick n = session("numApples") If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = "Correct, well done!" Else msg.InnerHtml = "Sorry, please try again." End If End Sub
Mark Dixon 26
Problem Solving Strategies• bottom-up
– Create a detailed solution first– Then look for best solution– refactoring – process of:
• changing internal design of code,• without altering what it does
• top-down– plan overall design– fill in details
in practice mixed – novices favour bot-up, experts top-down
Mark Dixon 27
Example: Apples 2• Difficult to see dependencies for lines far
apart
Dim n As LongDim html As String
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim a As Long n = 1 + Int(Rnd() * 9) html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html session("numApples") = n End Sub
Mark Dixon 28
Example: Apples 3• Put dependent lines close together
Dim n As LongDim html As String
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim a As Long n = 1 + Int(Rnd() * 9) session("numApples") = n html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html End Sub
Mark Dixon 29
Example: Apples v3 (design)• Functionality:
• computer selects number between 1 and 10• computer displays that number of apples• user types digits
• computer compares digits to number of apples
and displays number of apples typed by user
Mark Dixon 30
Example: Apples v3 (code)<%@ Page Language="VB" %><script runat="server">Dim n As LongDim html As String
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick Dim a As Long n = 1 + Int(Rnd() * 9) session("numApples") = n html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html End Sub Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick Dim a As Long n = session("numApples") html = "" For a = 1 To txtAns.Value html = html & "<img src=Apple.gif>" Next If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = html + "Correct, well done!" Else msg.InnerHtml = html + "Sorry, please try again." End If End Sub</script>
<html> <head><title></title></head> <body> <form runat="server"> <p id="quest" runat="server"></p> <input id="btnStart" type="submit" value="Start" runat="server" /> <input id="txtAns" type="text" runat="server" /> <input id="btnCheck" type="submit" value="Check" runat="server" /> <p id="msg" runat="server"></p> </form> </body></html>
Apples.aspx
Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick Dim a As Long n = session("numApples") html = "" For a = 1 To txtAns.Value html = html & "<img src=Apple.gif>" Next If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = html + "Correct, well done!" Else msg.InnerHtml = html + "Sorry, please try again." End If End Sub
• copy + paste
Mark Dixon 31
Modular Design• What do lines do (group summary)?
n = 1 + Int(Rnd() * 9) Session("NumApples") = n html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html
Pick Num. of Apples
Display Question
Mark Dixon 32
Modular Design (top level)• Top level reads like English algorithm:
Dim n As LongDim html As String
Sub btnStart_Click(s As Object, e As EventArgs) Handles btnStart.ServerClick PickRandomNumberOfApples() DisplayQuestion() End Sub Sub btnCheck_Click(s As Object, e As EventArgs) Handles btnCheck.ServerClick n = session("numApples") DisplayApplesUser() DisplayFeedback() End Sub
Mark Dixon 33
Sub PickRandomNumberOfApples() n = 1 + Int(Rnd() * 9) session("numApples") = n End Sub Sub DisplayQuestion() Dim a As Long html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html End Sub Sub DisplayApplesUser() Dim a As Long html = "" For a = 1 To txtAns.Value html = html & "<img src=Apple.gif>" Next End Sub Sub DisplayFeedback() If CInt(txtAns.Value) = CInt(n) Then msg.InnerHtml = html + "Correct, well done!" Else msg.InnerHtml = html + "Sorry, please try again." End If End Sub
Modular Design (detail)• Procedures contain (hide) detail:
Sub DisplayQuestion() Dim a As Long html = "How many apples are there?<br />" For a = 1 To n html = html & "<img src=Apple.gif>" Next quest.InnerHtml = html End Sub Sub DisplayApplesUser() Dim a As Long msg = "" For a = 1 To txtAns.Value msg = msg & "<img src=Apple.gif>" Next End Sub
Mark Dixon 34
Problem Solving: 9 dots• Join all 9 dots
– with 4 straight continuous lines
Mark Dixon 35
Problem Solving Process (Name Split)
• Problem: a variable exists called n. This contains a person's full name (forename, then surname ). It needs to be split into two separate variables.
Dim n As String
n = "Ruth Jones"
• Solution Process:– What do I do to solve this manually (on paper)?– How do I know where the forename ends and the
surname begins?– The space is the key:
• Find the space• everything before the space is the forename• everything after the space is the surname
Mark Dixon 36
Tutorial Exercise: Message• LEARNING OBJECTIVE:
pass data between pages using session variables, and (form) self-posting
• Task 1: Get the message example working (from the lecture)• Task 2: Change the send.aspx page so that when you click the
buttons it gives some feedback as to what has happened. hint: add a paragraph
Mark Dixon 37
Tutorial Exercise: Logon• LEARNING OBJECTIVE:
pass data between pages using session variables, and (form) self-posting
• Task 1: Type in the code for the Logon v3 example (from the lecture) NOTE: this will not work properly (variables do not persist between pages)
• Task 2: Modify this to use a session variable to 'remember' whether the logon was successful. Note: It should not be possible to view the source code Note: It should not be possible to bypass the logon
Mark Dixon 38
Tutorial Exercise: Date• LEARNING OBJECTIVE:
pass data between pages using query strings
• Task 1: Get the Date-Time example (from the lecture) working• Task 2: Modify your page to provide another choice of background
colour.
Mark Dixon 39
Tutorial Exercise: Apples• LEARNING OBJECTIVE:
pass data between pages using session variables, and (form) self-posting
• Task 1: Type in the code for the Apples example (from the lecture)• Task 2: Modify this to use a session variable to 'remember' the random
number, so that it works properly.• Task 3: Change it so that it disables the buttons appropriately• Task 4: Change it so that it clears the text box and feedback as a new
question begins• Task 5: Add a score facility.
– when the page loads, the score should be 0– when the answer is correct, the score should increase by 1– when the score goes over 10, a congratulations message should
be shown, and the score reset to 0
Mark Dixon 40
Tutorial Exercise: Apples• LEARNING OBJECTIVE:
identify dependencies between lines of coderefactor code: dependent lines closerrefactor code: split into routines (procedures and functions)refactor code: make routines self-contained
• Task 1: Get the Apples v3 example (from the lecture) working• Task 2: Modify your page to keep a score.
HINT: Try to identify the routines first, then fill in the code.