2015-02-10 2 views
0

Я получаю следующую ошибку: «Индекс находился за пределами массива» всякий раз, когда я ввожу пароль с помощью следующего System.IndexOutOfRangeException: индекс находился за пределами массива , Любая идея о том, что здесь не так?Индекс находился за пределами массива VB .NET

If Membership.ValidateUser(Login1.UserName, Login1.Password)           Then 
     'Has the password expired? 
     Dim usrInfo As MembershipUser = Membership.GetUser(Login1.UserName) 
     Dim roles As String() = System.Web.Security.Roles.GetRolesForUser(usrInfo.UserName.ToString()) 
     If roles(0).Equals("User") Then 
      Dim daysSincePwdChange As Integer = Convert.ToInt32(DateTime.Now.Subtract(usrInfo.LastPasswordChangedDate).TotalDays) 
      If daysSincePwdChange > SecurityUtils.DefaultPasswordExpiryInDays Then 
       'Password expired, send user to change password 
       'MsgBox("expire passwd") 

ответ

0

System.Web.Security.Roles.GetRolesForUser не возвращает никаких результатов для значения, переданного ему, так что ваш массив пуст. Если вы ищете первое значение в своем массиве с помощью Если роли (0) .Equals ("Пользователь") ... это ошибка.

Вы можете обрабатывать ошибку, добавляя что-то вроде

If NOT roles.getLength() = 0 Then 
If roles(0).Equals("User") Then 
      Dim daysSincePwdChange... 

Или использовать Try/Выгоду для обработки ошибок.