从c#function composite c1中获取项目集合

时间:2016-01-12 08:14:38

标签: c# c1-cms

我写了一个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(string Name)的结果是HTML字符串结果。 如何调用定义的内联C#函数来获取函数的原始结果?

2 个答案:

答案 0 :(得分:0)

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

可以做到这一点吗?

答案 1 :(得分:0)

Razor页面中的函数方法是为输出Html而设计的,这就是为什么它的行为方式。如果要从函数中检索任何非html值,可以使用Functions.ExecuteFunction(...)辅助方法,该方法返回object,然后可以将其转换为您知道函数返回的类型。 / p>

所以总的来说你的代码看起来像这样

@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>
  }
}

Read about the Functions helper class here