【问题标题】:asp.net / sql user.identity.nameasp.net / sql user.identity.name
【发布时间】:2012-01-17 02:53:27
【问题描述】:

我试图在 ASP.NET 中获取详细信息视图以仅显示登录用户的详细信息。我被告知要使用:

select * from STAFF where USERNAME = user.identity.name

我认为这太简单了以至于我是正确的,因为当我尝试运行时它没有显示任何数据。请对此有任何帮助..

【问题讨论】:

  • 您使用什么类型的身份验证?您使用的是 .net Membership Provider。它是连接到 Active Directory 还是形成身份验证?您使用的是什么类型的数据库?找出答案的最佳方法是查看您的数据库并检查 aspnet_xxxx 表是否存在。如果没有,那么我没有太多事情要做。
  • 使用 SQL 数据库,存在 asp.net_xxxx 表并使用表单身份验证。
  • 我不认为他们打算使用文字字符串user.identity.name。我认为他们的意思是构建一个 SQL 语句,其中 USERNAME 等于登录用户的User.Identity.Name 属性的值。

标签: asp.net sql vb.net visual-studio-2010


【解决方案1】:

我最近也尝试过这样做。我想做的事情太让人头疼了,所以我最终从头开始构建表单。如果您想使用详细信息视图,您可以调用

aspnet_Membership_GetUserByName 或 aspnet_Membership_GetUserByEmail 或 aspnet_Membership_GetUserByUserId

并使用结果填充 DataTable 或 DataSet 并将其 DataBind 到您的 DetailsView。但是,如果您可以避免为此使用 DetailsView,我会推荐它,因为您绕过了 Membership 提供程序,这完全违背了首先拥有它的目的。

尝试通过创建CustomMembershipProvider 来扩展SqlMembershipProvider,并覆盖和重载GetUser() 方法以返回可以轻松绑定到详细信息视图的DataTable。

看起来像这样>

using System.Web.Security;
using System.Data;

namespace yourNameSpace
{

    public class CustomSqlMembershipProvider : SqlMembershipProvider
    {


        public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
        {
            return base.GetUser(providerUserKey, userIsOnline);
        }

        public DataTable GetUser(string UserName)
        {
            MembershipUser user = base.GetUser(username, false);

            //code to create a datatable and populate it with user properties.
            DataTable dt = new DataTable();

            //Add columns
            DataColumn column = new DataColumn();

            //add columns to table

            return dt;
        }
    }
}

完成后,请确保在 web.config 中引用您的新成员资格提供商。

帮助这给你一些方向。它需要一些工作,但最终它更容易维护,然后排除任何成员规避代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    相关资源
    最近更新 更多