2014-11-09 4 views
-1

Как вы получаете общедоступную общую функцию за пределами Защищенного субпользователя, используйте значения из защищенного юга для postBack на той же веб-странице. Постбэк ответ работает, но запрос функции проваливает (линия 44 Char 17 "fqdom = дом &" .forest.local ")Нельзя ссылаться на член экземпляра класса из общего метода

Imports System 
Imports System.IO 
Imports System.DirectoryServices 
Imports System.DirectoryServices.AccountManagement 
Imports System.DirectoryServices.ActiveDirectory 

Partial Class _Default 
Inherits System.Web.UI.Page 

Dim dom As String 
Dim Group1 As String 
Dim Group2 As String 
Dim usrname As String 
Dim fqdom As String 
Dim netdom As String 

Private Function GetDataFromArrayList() As ArrayList 
    Dim DomainList As New ArrayList() 
    DomainList.Add(New ListItem("d1", "dom1")) 
    DomainList.Add(New ListItem("d2", "dom2")) 
    Return DomainList 
End Function 

Protected Sub Selection_Changed(ByVal sender As Object, _ 
    ByVal e As System.EventArgs) Handles Me.Load 

    If Not Page.IsPostBack Then 
     For Each item As ListItem In GetDataFromArrayList() 
      DropDownList1.Items.Add(item) 
     Next 
    End If 
End Sub 

Public Shared Function GetGroups() As ArrayList 
    Dim groupList As New ArrayList() 
    Dim usrname As String 
    Dim fqdom As String 
    'Dim netdom As String 
    Dim groupCheck As String 
    fqdom = dom & ".forest.local" 

    Dim entry As System.DirectoryServices.DirectoryEntry 
    Dim searcher As System.DirectoryServices.DirectorySearcher 
    Dim result As System.DirectoryServices.SearchResult 

    Try 
     entry = New System.DirectoryServices.DirectoryEntry("LDAP://" & fqdom) 
     searcher = New DirectorySearcher() 
     searcher.SearchRoot = entry 
     searcher.Filter = "(samAccountName=" & usrname & ")" 
     searcher.PropertiesToLoad.Add("memberOf") 
     result = searcher.FindOne() 
     Dim groupCount As Integer = result.Properties("memberOf").Count 
     For groupCounter As Integer = 0 To groupCount - 1 
      groupCheck = CStr(result.Properties("memberOf")(groupCounter)) 
      groupCheck = groupCheck.Remove(groupCheck.LastIndexOf(",CN=")) 
      groupCheck = groupCheck.Replace("CN=", "") 
      groupList.Add(groupCheck) 
     Next groupCounter 

    Catch ex As Exception 

    End Try 

    Return groupList 
End Function 


Protected Sub Button1_Click(ByVal sender As Object, _ 
    ByVal e As System.EventArgs) Handles Me.Load 

    If IsPostBack Then 

     Dim name As Boolean = False 

     If Not TextBox1.Text = String.Empty Then 
      name = True 
     End If 


     If name = False Then 
      StatusLabel.Text = "Update Status: Please Enter Name" 

     ElseIf name = True Then 


      Group1 = "groupb1" 
      Group2 = "groupb2" 

      Try 
       form1.Visible = False 
       Dim groups As New ArrayList() 
       groups = GetGroups() 
       Dim group As String 
       For Each group In groups 
        'NameLabel.Text = group 

        If (group.Contains(Group1)) Then 
         Group1.Text = "User: " & usrname & " is in group1" 
        End If 

        If (group.Contains(Group2)) Then 
         Group1.Text = "User: " & usrname & " is in group2" 
        End If 
       Next 

       fqdn.Text = "Domain: " & dom & ".forest.local" 
       NameLabel.Text = "User: " & usrname 

      Catch ex As Exception 

      End Try 

     Else 
      StatusLabel.Text = "Upload status: Error Please Retry later" 
     End If 
    End If 
End Sub 
End Class 

ответ

5

Удалить Shared keyword из метода, поэтому заменить

Public Shared Function GetGroups() As ArrayList 

с

Public Function GetGroups() As ArrayList 

Вы не можете использовать переменные экземпляра, как dom внутри метода Shared.

Вы также можете сделать эти поля Shared. Но это не очень хорошая идея в ASP.NET, поскольку это может вызвать проблемы с блокировками и параллелизмом, и каждый запрос имеет одинаковые значения (даже для разных пользователей).

Это также не обязательно, так как вы хотите использовать этот метод из метода страницы (нажатие кнопки), так что вам все равно нужен экземпляр страницы.

Если вам нужно сохранить значение через обратную передачу, вы можете использовать другой способ, например, использовать ViewState, Session или HiddenField.

+1

В этом случае я считаю, что это переменная 'dom', которая вызывает проблему. Опция «fqdom» снова объявлена ​​как локальная переменная в этом совместном методе. Но ваш ответ по-прежнему применяется, конечно. –

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