2

我下面的代码在编译期间没有任何错误,但是当我打开页面时出现错误,Guid currentUserId = (Guid)currentUser.ProviderUserKey;指出对象引用未设置为对象的实例。

foreach(DataRowView ProfileInfo in UserProfileDataSource.Select(DataSourceSelectArguments.Empty))
            {
              //Some codes where I display data from database
            }



protected void UserProfileDataSource_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        MembershipUser currentUser = Membership.GetUser();

        Guid currentUserId = (Guid)currentUser.ProviderUserKey;

        e.Command.Parameters["USERID"].Value = currentUserId;
    }

这是我的 SQLDataSource

<asp:SqlDataSource ID="UserProfileDataSource" runat="server" 
            ConnectionString="<%$ ConnectionStrings:ConnectionString %>" 
            onselecting="UserProfileDataSource_Selecting" 
            ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"


            SelectCommand="SELECT &quot;TITLE&quot;, &quot;FAMILYNAME&quot;, &quot;GIVENNAME&quot;, &quot;MIDDLENAME&quot;, &quot;POSITION&quot;, &quot;INSTITUTIONNAME&quot;, &quot;USERID&quot;, &quot;REGISTEREDDATE&quot; FROM &quot;MEMBERINFO&quot; WHERE (&quot;USERID&quot; = ?)">
            <SelectParameters>
                <asp:Parameter Name="USERID" Type="Object" />
            </SelectParameters>
        </asp:SqlDataSource>

厄尼

4

4 回答 4

4

在尝试访问它之前,您应该检查以确保 currentUser 不为空:

if ( currentUser != null )
{
/* do stuff here */
}
else
{
/* do something else, like show an error message perhaps */
}
于 2012-03-11T08:51:50.463 回答
0

您似乎允许匿名用户访问需要登录用户的页面。如果用户尚未登录,您将无法获取该用户。

安全性由授权和认证两部分组成。身份验证正在登录,但授权正在拒绝未经授权的用户(例如尚未登录或未分配正确角色的用户)访问页面。

如果您的页面依赖于经过身份验证的用户,那么您应该拒绝匿名用户访问。如果页面不依赖于经过身份验证的用户,而仅在经过身份验证的情况下使用成员信息,那么您需要防止在用户未经身份验证时调用成员函数(或任何使用成员数据的东西)。

于 2012-03-11T09:42:20.277 回答
0

试试这个代码:

 string username =  HttpContext.Current.User.Identity.Name;

 if(!string.IsNullOrEmpty(username))
 {
 MembershipUser currentUser = Membership.GetUser(username);
 Guid currentUserId = new Guid(currentUser.ProviderUserKey.ToString());

 }
于 2012-03-11T09:35:10.890 回答
-1

问题是错误的代码。请尝试以下步骤:- 在您的网站中,将“起始页”设置为正确的“登录”页。正确登录然后登陆页面后,​​您应该能够访问此属性。如果您单击注销按钮并且登录页面可能引用此会员信息,您可能会遇到相同的错误。

所以解决方法很简单。1.正确设置起始页。2.处理两种情况:- 用户已登录且用户未有效登录。一个例子如下: -

protected void Page_Load(object sender, EventArgs e) {

     if (Membership.GetUser() == null)
     { Label1.Text = "";
     Label_TotalCoxxxxxxxxx.Text = "";
     Label_TotalSuxxxxxxxxx.Text  ="";
     }
     else {
        string loggedinuser = Membership.GetUser().ToString();
        Label1.Text = loggedinuser;
        Label_TotalCoxxxxxxxxx.Text = "Total of xxxxxxxxxx Added in the current Month:-";
        Label_TotalSuxxxxxxxxx.Text = "Total of yyyyyyyyyy done in the current Month:-";
     }
}
于 2013-02-12T01:14:22.687 回答