Контроль входа в систему, если имя пользователя не найдено, текст метки должен отвечать имени пользователя не найдено - PullRequest
2 голосов
/ 28 сентября 2011

получил несколько вопросов здесь.Как вы все знаете, я создал класс, в котором я просто создаю его экземпляр на моей странице .aspx. На моей странице .aspx у меня есть logincontrol с именем login1.Теперь я получаю ошибку, когда user.UserName = Nothing и останавливаемся на этом user.UserName = Nothing, говоря Object reference not set to an instance of an object.. Не могли бы вы помочь мне отладить проблему.Все, что я хочу, это то, что если имя пользователя отсутствует в базе данных, lblmessage должно сказать Ошибка Имя пользователя недействительно , и если это правильно, то он проверит пароль.Пожалуйста, помогите.Спасибо и еще больше сил, ребята.

Страница Aspx

    Protected Sub LoginButton_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim user As New User
    Dim userDAL As New UserDAL
    user = userDAL.SelectByUsername(Login1.UserName)
    If user.UserName = Nothing Then
        Login1.FailureText = "Invalid Username"
    Else
        If Login1.Password <> user.Password Then
            Login1.FailureText = "Invalid password"
        Else
            Login1.FailureText = "success"
        End If
    End If

End Sub

UserDAL.vb

 Public Function SelectByUsername(ByVal userName As String) As User
    Try
        'select * from User where Username = 'userName'
        Dim sqlConn As New SqlConnection(_connString)
        sqlConn.Open()

        Dim sqlCmd As New SqlCommand("select * from [Users] where Username = '" & userName & "'", sqlConn)

        Dim dr As SqlDataReader = sqlCmd.ExecuteReader()

        'Create user collection
        Dim user As User = Nothing

        While dr.Read()
            'Create User object
            user = New User
            user.UserName = dr("UserName").ToString
            user.Password = dr("Password").ToString
            user.FirstName = dr("FirstName").ToString
            user.Surname = dr("Surname").ToString

        End While
        dr.Close()

        Return user
    Finally
        If _sqlConn IsNot Nothing Then
            If _sqlConn.State = Data.ConnectionState.Open Then
                _sqlConn.Close()
            End If
        End If
    End Try
    Return Nothing
End Function

Ответы [ 2 ]

1 голос
/ 28 сентября 2011

Вместо сравнения с user.Username сначала вы сравниваете только с user, т.е.

If user Is Nothing Then 

Почему Bcoz в вашей функции SelectByUsername вы возвращаете Nothing, если это неверное имя пользователя. Попробуйте и ответьте.

0 голосов
/ 28 сентября 2011

Я бы пошел с самым простым ответом на этот вопрос. Добавьте в ваш элемент управления Сводку проверки, которая возвращает требуемое значение («Имя пользователя недействительно»), а затем в своем коде для проверки выполните

if(Page.IsValid) (This is C# code but VB should be very close to this)

Это должно решить вашу проблему.

Вот быстрый фрагмент

       <asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
       <asp:RequiredFieldValidator id="RequiredFieldValidator1" runat="server" ErrorMessage="User Name Not Valid" ControlToValidate="TextBox1"></asp:RequiredFieldValidator>

Теперь обратите внимание, что это сообщение об ошибке будет отображаться справа от текстового поля, однако вы можете задать его стиль или даже установить группу проверки.

Обязательное поле проверки или группа проверки со сводкой проверки заставляет клиентскую проверку с ASP.NET для обратной передачи, поэтому при срабатывании кнопки отправки запускается тест и определяется, является ли Page.IsValid == true или false;

http://msdn.microsoft.com/en-us/library/aa479013.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...