Получить коллекцию предметов из композита C# function c1

Я написал функцию C#, которая повторяет список пользователей из Active Directory.

        public static IEnumerable<string> ActiveDirectoryUsersList()
        {
            string[] adPropertiesToRetrive = { "displayName", "mail", "telephoneNumber", "displayName", "mobile" };
            List<string> usersInfo = new List<string>();
            // create and return new LDAP connection with desired settings  
            DirectoryEntry myLdapConnection = new DirectoryEntry("LDAP://OU=Users,OU=OUName,OU=Groups,DC=myDomain,DC=com", null, null, AuthenticationTypes.Secure);

            DirectorySearcher search = new DirectorySearcher(myLdapConnection);
            search.Filter = "(&(objectClass=user)(objectCategory=person))";
            foreach (var prop in adPropertiesToRetrive)
            {
                search.PropertiesToLoad.Add(prop);
            }

            SearchResultCollection allUsers = search.FindAll();

            foreach (SearchResult user in allUsers)
            {
                foreach (var prop in adPropertiesToRetrive)
                {
                    var val = user.Properties[prop].Count > 0 ? user.Properties[prop][0].ToString() : "-";
                    usersInfo.Add(val);

                }

            }
            return usersInfo;
        }

Теперь я хочу использовать это в моей функции Razor и повторять что-то вроде этого:

@foreach (var user in Fucntion("Custom.ActiveDirectoryUsersList"))
{
    @user
}

но результат Function(строковое имя) является результатом HTML-строки. Как я могу вызвать встроенную функцию C#, определенную, чтобы получить необработанный результат функции?

2 ответа

@foreach (var user in Function("Custom.ActiveDirectoryUsersList"))
{
   <text>@Html.Raw(user)</text>
}

мог сделать трюк?

Метод Function на странице Razor предназначен для вывода Html, поэтому он ведет себя так, как он есть. Если вы хотите получить любое не HTML-значение из вашей функции, вы можете использовать Functions.ExecuteFunction(...) вспомогательный метод, который возвращает object который вы можете затем привести к типу, который, как вы знаете, возвращает ваша функция.

В общем, ваш код будет выглядеть так

@foreach (var user in ((IEnumerable<string>)Functions.ExecuteFunction("Custom.ActiveDirectoryUsersList")))
{
  <span>@user</span>
}

Или немного чище

@{
  var users = (IEnumerable<string>)Functions.ExecuteFunction("Custom.ActiveDirectoryUsersList");

  foreach (var user in users)
  {
    <span>@user</span>
  }
}

Читайте о вспомогательном классе функций здесь

Другие вопросы по тегам