Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 会员用户在';你不是吗?_C#_Asp.net_.net_Asp.net Membership_User Profile - Fatal编程技术网

C# 会员用户在';你不是吗?

C# 会员用户在';你不是吗?,c#,asp.net,.net,asp.net-membership,user-profile,C#,Asp.net,.net,Asp.net Membership,User Profile,我有一个问题,我的用户列表中的每个用户都显示为在线,而我知道他们不是 加载页面时,它们显示为脱机,但如果刷新页面,它们都显示为联机。我假设这是因为我以编程方式访问他们的配置文件信息(CommonProfile),以获取要在gridview上显示的数据 有没有办法在不触发IsOnline属性为true的情况下获取配置文件信息 更新: 对不起,代码在这里。请温柔一点,我对c#&asp.net还比较陌生,我还在学习 代码从成员资格用户和公共配置文件收集信息,并将字段添加到数据表中,以便我可以在grid

我有一个问题,我的用户列表中的每个用户都显示为在线,而我知道他们不是

加载页面时,它们显示为脱机,但如果刷新页面,它们都显示为联机。我假设这是因为我以编程方式访问他们的配置文件信息(CommonProfile),以获取要在gridview上显示的数据

有没有办法在不触发IsOnline属性为true的情况下获取配置文件信息

更新: 对不起,代码在这里。请温柔一点,我对c#&asp.net还比较陌生,我还在学习

代码从成员资格用户和公共配置文件收集信息,并将字段添加到数据表中,以便我可以在gridview中显示结果

MembershipUserCollection usersList = Membership.GetAllUsers();
MembershipUserCollection filteredUsers = new MembershipUserCollection();

foreach (MembershipUser user in usersList)
{
    if (!Roles.IsUserInRole(user.UserName, "Admin") && !Roles.IsUserInRole(user.UserName, "Engineering"))
    {
        if (txtFilterCustomerNo.Text.Length > 0)
        {
            ProfileCommon PC = Profile.GetProfile(user.UserName);
            if (PC.CompanyAccountNo == txtFilterCustomerNo.Text.ToUpper())
            {
                filteredUsers.Add(user);
            }
        }
        else
        {
            filteredUsers.Add(user);
        }
    }
}

txtFilterCustomerNo.Text = null;

foreach (MembershipUser user in filteredUsers)
{
    userProfile = Profile.GetProfile(user.UserName);
    string[] userRoles = Roles.GetRolesForUser(user.UserName);

    DataRow orderLine = dataSet.Tables["UserAccounts"].NewRow();
    orderLine["USER_NAME"] = user.UserName;
    orderLine["CREATED"] = user.CreationDate;
    orderLine["LAST_LOGIN"] = user.LastLoginDate;
    orderLine["PASSWORD_CHANGED"] = user.LastLoginDate;
    orderLine["ACTIVE"] = user.IsApproved;
    orderLine["ONLINE"] = user.IsOnline;
    orderLine["LOCKED"] = user.IsLockedOut;
    orderLine["CUSTOMER_NO"] = userProfile.CompanyAccountNo;
    orderLine["HAS_INVENTORY"] = userProfile.HasOwnInventory;
    orderLine["ORDER"] = userRoles.Contains("Order");
    orderLine["REPAIR"] = userRoles.Contains("Repair");
    orderLine["WARRANTY"] = userRoles.Contains("Warranty");
    orderLine["COMMISSIONING"] = userRoles.Contains("Commissioning");
    orderLine["ACCOUNT"] = userRoles.Contains("Account");
    dataSet.Tables["UserAccounts"].Rows.Add(orderLine);
}

if (dataSet.Tables.Contains("UserAccounts"))
{
    GridView1.DataSource = dataSet.Tables["UserAccounts"];
}

如果您只是查看GetUser的不同重载,就会发现其中一些重载采用了一个名为userIsOnline的布尔值。如果将其指定为false,则不会更新最后一个联机时间戳,也不会将其列为联机

var user = Membership.GetUser(userid, false);
编辑:


我看到您使用的是
GetAllUsers()
而不是
GetUser()
GetAllUsers()
存在一些问题,您不能依赖IsOnline属性。相反,您需要检查
LastActivityDate
字段,并找出该字段与当前日期时间之间的差异。如果时间比你所说的“在线”要大,那么它们是离线的,否则在线。

访问用户的实际代码可能会有帮助。我确实在寻找,但在我的代码中,超载似乎不可用。也许有更好的方法来实现我的目标,但作为asp.net&c的新手,我仍在学习。我向你保证,它就在那里。会员API自7年前推出以来一直没有改变。我毫不怀疑,我已经看到了设置,只是在我的代码中它不可用(见上文)。我看不到?当然不是在GetAllUsers()中……啊。。。我将查看LastActivityDate属性!谢谢:-d当我尝试这个时,它仍然不起作用(但我知道逻辑是合理的)。。。所以我在gridview中添加了LastActivityDate属性,发现每个用户的LastActivityDate都是相同的时间,并且每次刷新页面时都会更新。。。更新最新活动日期将是什么??