3

Umbraco サイトのすべてのユーザーの詳細を取得しようとしています。これの目的は、コンテンツ作成者が、Web サイトの匿名ユーザーが連絡できるコンテンツの「所有者」としてユーザー名を指定できるようにすることです (ユーザー名とコンテンツによって与えられたユーザー名を照合した後、保存された電子メール アドレスを使用する単純な「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>
        }    
    }

}
4

1 に答える 1

7

userservice は Services コレクションで利用できます。MVC ビューまたはパーシャルを使用する場合は、Services で見つけることができます。そうでなければ、あなたはそれを見つけることができます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()

しかし...サービスがデータベースにヒットすることを覚えておいてください。多くのユーザーでパフォーマンスの高いWebサイトを構築したい場合は、別のソリューションを検討してください.

于 2014-07-12T19:44:00.833 に答える