我正在尝试检索Umbraco网站中所有用户的详细信息。这样做的目的是使内容创建者可以将用户名指定为内容的“所有者”,该内容可以由网站的匿名用户联系(使用存储的电子邮件地址后的简单“mailto”链接将用户名与内容给出的用户名匹配)创建者)。
我已经能够使用以下方式获取用户详细信息:
var users = umbraco.BusinessLogic.User.getAll();
但是我在Visual Studio中通过以下警告提示我:
'Umbraco.BusinessLogic.User' is obsolete: '"Use the UserService instead"'
我创建了UserService的实例,但GetAll()函数需要许多BusinessLogic函数不支持的参数。
如何让所有用户使用UserService?
我有更好的方法来实现我想要实现的目标吗?
为了澄清,这是我在已弃用的BusinessLogic中使用的以下代码:
var users = umbraco.BusinessLogic.User.getAll();
var owners = Umbraco.Field("owner").ToString().Split(',');
foreach (var user in users)
{
foreach (var owner in owners)
{
if (String.Equals(user.LoginName, owner))
{
<div class="owner">
<a href="mailto:@user.Email">@owner</a>
</div>
}
}
}
答案 0 :(得分:7)
用户服务在Services集合中可用。如果您使用MVC视图或部分,您可以在服务中找到它。否则,您可以在ApplicationContext.Current.Services
找回它的另一种方法是:
using Umbraco.Core.Services;
using Umbraco.Core.Persistence;
var userService = new UserService(new RepositoryFactory());
可以在UmbracoContext.Current.Security.CurrentUser
<强>更新强>
要执行GetAll,您可以在视图中执行此操作:
@{
var userService = ApplicationContext.Current.Services.UserService;
int totalRecords;
}
@foreach (var user in userService.GetAll(0, 100, out totalRecords))
{
<h1>@(user.Name)</h1>
@user.Username
}
找到的用户数:@ totalRecords.ToString()
但是......记住服务会打到数据库,如果你想建立一个有很多用户的表现良好的网站,可以考虑另一个解决方案。