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 是表的名称,我将名称字段标记为名称(为像我这样可能正在阅读本文的初学者解释)

然后在 html 标记中,我将 @WebSecurity.CurrentUserName 更改为 @authenticatedUser 所以现在它显示为:

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

导致它现在显示用户的姓名而不是他们的电子邮件地址的预期结果。

于 2012-12-10T03:02:03.413 回答