用vb.net编写注册网页的问题
我用visual studio 2005的visual basic.net编写网页的注册界面,要求输入用户名。要求:如果输入的用户名已有了,则提示重新输入;如果没有,则输入到数据库中,
并提示输入成功。现在的问题是,若重名,不提示重新输入,而是重新转向注册界面;若不重名,输入到数据库中,并不提示输入成功。为何?
register.aspx和register.aspx.vb文件如下:
register.aspx:
<%@ Page Language= "VB " AutoEventWireup= "false " CodeFile= "register.aspx.vb " Inherits= "_Default2 " %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN " "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
<%--Created by FC. --%>
<%-- register the user information --%>
<%--Input: login.aspx --%>
<%--Go to: tbd --%>
<html xmlns= "http://www.w3.org/1999/xhtml " >
<head id= "Head1 " runat= "server ">
<title> register.aspx </title>
</head>
<body>
<form ENCTYPE= "multipart/form-data " runat= "server " id= "form1 ">
Register information <br>
<table >
<tr> <td> User name: </td> <td> <asp:TextBox id= "id1 " runat= "server " > </asp:TextBox> <br> </td> </tr>
<tr> <td> Password: </td> <td> <asp:TextBox id= "id2 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> First name: </td> <td> <asp:TextBox id= "id3 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> Last name: </td> <td> <asp:TextBox id= "id4 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> Year of birth: </td> <td> <asp:TextBox id= "id5 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> telephone: </td> <td> <asp:TextBox id= "id6 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> Email: </td> <td> <asp:TextBox id= "id7 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> Expertise: </td> <td> <asp:TextBox id= "id8 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> Current position: </td> <td> <asp:TextBox id= "id9 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> residential city: </td> <td> <asp:TextBox id= "id10 " runat= "server "> </asp:TextBox> <br> </td> </tr>
<tr> <td> residential country: </td> <td> <asp:TextBox id= "id11 " runat= "server "> </asp:TextBox> <br> </td> </tr>
</table>
<asp:Label ID= "la1 " runat= "server " > </asp:Label>
<asp:Button id= "Button1 " onclick= "register_save " runat= "server " Text= "save " BackColor= "#E0E0E0 " BorderColor= "WindowFrame "> </asp:Button> <br>
<asp:Button id= "Button2 " onclick= "test_save " runat= "server " Text= "test_save " BackColor= "#E0E0E0 " BorderColor= "WindowFrame "> </asp:Button> <br>
<%-- <asp:label id= "la1 " runat= "server "> </asp:label> --%>
<asp:label id= "la2 " runat= "server "> </asp:label>
</form>
<%-- <asp:Label ID= "la1 " runat= "server " > </asp:Label> --%>
</body>
</html>
register.aspx.vb:
Imports System
Imports System.Data
Imports System.Data.Sqlclient
Imports System.windows.forms
Imports System.drawing
Imports System.Web.UI.Control
Imports System.Web.UI.WebControls
Imports System.Web.UI.WebControls.DataGrid
Partial Class _Default2
Inherits System.Web.UI.Page
Sub register_save(ByVal s As Object, ByVal e As EventArgs) Handles Button1.Click
Dim againtag As String = Request( "gobacknote ")
la2.Text = "againtag= " & againtag
If againtag = "loginagain " Then
la1.Text = "the user name has been used, please input another user name. " '提示重新输入用户名
End If
Dim ComResult As Integer '两个字符串比较的结果
Dim myConnection As SqlConnection
Dim myCommand As SqlCommand
Dim strSQL As String
Dim dr1 As SqlDataReader
strSQL = "select username from register_table "
myConnection = New SqlConnection( "server=xichen;database=historybook;uid=sa;pwd=1234 ")
myCommand = New SqlCommand(strSQL, myConnection)
myConnection.Open()
dr1 = myCommand.ExecuteReader()
If dr1.HasRows Then
While dr1.Read()
Response.Write( "dr1 is " & dr1.Item( "username ") & " <br> ")
ComResult = String.Equals(Trim(id1.Text), Trim(dr1.Item( "username "))) ' True) 'compare whether id1.text is equal to dr1.tiem,no lower or upper case
Response.Write( "ComResult= " & ComResult & " <br> ")
If ComResult = -1 Then 'find whether username has been used,ComResult is -1 means that the two items are equal.
'Response.Write( "repeated " & " <br> ")
Response.Redirect( "register.aspx?gobacknote= " "loginagain " " ")
'la2.Text = id1.Text & " has already exist. "
End If
End While
End If
myConnection.Close()
strSQL = "insert into register_table ( username, password,firstname,lastname,year_of_birth,telephone,email,expertise,current_position,residential_city,residential_country) values ( @username , @password,@firstname,@lastname,@year_of_birth,@telephone,@email,@expertise,@current_position,@residential_city,@residential_country) "
myCommand = New SqlCommand(strSQL, myConnection)
myCommand.Parameters.Add( "@username ", id1.Text)
myCommand.Parameters.Add( "@password ", id2.Text)
myCommand.Parameters.Add( "@firstname ", id3.Text)
myCommand.Parameters.Add( "@lastname ", id4.Text)
myCommand.Parameters.Add( "@year_of_birth ", id5.Text)
myCommand.Parameters.Add( "@telephone ", id6.Text)
myCommand.Parameters.Add( "@email ", id7.Text)
myCommand.Parameters.Add( "@expertise ", id8.Text)
myCommand.Parameters.Add( "@current_position ", id9.Text)
myCommand.Parameters.Add( "@residential_city ", id10.Text)
myCommand.Parameters.Add( "@residential_country ", id11.Text)
myConnection.Open()
myCommand.ExecuteNonQuery()
la1.Text = "you have click save button and register successful. "
myConnection.Close()
End Sub
End class
[解决办法]
Dim againtag As String = Request( "gobacknote ")
la2.Text = "againtag= " & againtag
If againtag = "loginagain " Then
la1.Text = "the user name has been used, please input another user name. " '提示重新输入用户名
End If
这一段语句应当放在page_load()里面,你放在按钮动作反应区块里,只有当按钮被激活时才会执行