1

ログインを使用するWebmatrixのスターターサイトテンプレートを使用してサイトを構築しました。ユーザーがログインすると、上部に「こんにちは、(メールアドレス)!」と表示されます。

HTMLコードを見ると、

Hello, <a id="logname" class="email" href="~/Account/Manage" title="Manage">@WebSecurity.CurrentUserName</a>!

私はasp.netの初心者ですが、次のロジックで問題を解決できるので、データベースに「名前」フィールドを追加して、電子メールとパスワードを保存し、登録ページを編集して、ユーザーが入力できるようにします。名前も、データベースに問題なく書き込みます。

ここで、@ WebSecurity.CurrentUserNameがユーザーの電子メールアドレスを参照している場所を見つけて、代わりに[名前]フィールドを指すようにするだけだと思いました。しかし、私は高低を検索しましたが、どこにも見つからないようです。

したがって、次のアプローチは、フィールドからデータをフェッチし、名前を取得して必要な場所に表示するように変更するBakeryデータベースチュートリアルのコードを使用することでした。ここで使用しようとしたコードは次のとおりです。

@foreach(var row in db.Query(selectQueryString))

これは最初はうまくいったようで、「こんにちは、ベン!」と表示されていました。しかし、それ以上アカウントを作成すると、それらも表示されるようになったので、しばらくすると、「こんにちは、ベン、スティーブ、グレイスなど...」と表示されました。

私は初心者ですが、このコードは私が必要としているものではないことに気づいていますが、その単一の名前フィールドを取得するが、現在ログインしているユーザーからのみ取得する類似のコードです...私はグーグルで検索し、多くを見ましたPHPやVB、またはWebmatrix以外のものを使用していることを除いて、同じことを望んでいる人々。

簡単な答えであれば、必要なコードをいただければ幸いです。そうでなければ、正しい方向を示していただければ幸いです。前もって感謝します..

4

1 に答える 1

1

皮肉なことに、質問を投稿した直後に解決策を見つけたので、ここに行きます..

これは、ファイル _SiteLayout.chtml の最上部に配置する必要があるコードです。

@{
var authenticatedUser = "";

if (WebSecurity.IsAuthenticated) {
authenticatedUser = WebSecurity.CurrentUserName;
var db = Database.Open("StarterSite");
var UserData = db.QuerySingle("SELECT Name FROM UserProfile WHERE LOWER(Email) = LOWER(@0)", authenticatedUser);
authenticatedUser = UserData.Name;
    }
}

StarterSite はデータベースの名前で、UserProfile はテーブルの名前です。名前フィールドに Name というラベルを付けました (これを読んでいる私のような初心者向けに説明されています)。

次に、html マークアップで @WebSecurity.CurrentUserName を @authenticatedUser に変更したので、次のようになりました。

Hello, <a id="logname" class="email" href="~/Account/Manage" title="Manage">@authenticatedUser</a>!

その結果、電子メール アドレスの代わりにユーザーの名前が表示されるようになりました。

于 2012-12-10T03:02:03.413 に答える