下面的代码在编译期间没有任何错误,但是当我打开页面时,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 "TITLE", "FAMILYNAME", "GIVENNAME", "MIDDLENAME", "POSITION", "INSTITUTIONNAME", "USERID", "REGISTEREDDATE" FROM "MEMBERINFO" WHERE ("USERID" = ?)">
<SelectParameters>
<asp:Parameter Name="USERID" Type="Object" />
</SelectParameters>
</asp:SqlDataSource>
欧尼
答案 0 :(得分:4)
在尝试访问之前,您应该检查以确保currentUser不为null:
if ( currentUser != null )
{
/* do stuff here */
}
else
{
/* do something else, like show an error message perhaps */
}
答案 1 :(得分:0)
试试这段代码:
string username = HttpContext.Current.User.Identity.Name;
if(!string.IsNullOrEmpty(username))
{
MembershipUser currentUser = Membership.GetUser(username);
Guid currentUserId = new Guid(currentUser.ProviderUserKey.ToString());
}
答案 2 :(得分:0)
您似乎允许匿名用户访问需要登录用户的页面。如果用户尚未登录,则无法获得该用户。
安全性由两部分组成,授权和身份验证。身份验证正在登录,但授权拒绝访问未授权用户的页面(例如尚未登录或未分配正确角色的用户)。
如果您的网页依赖于经过身份验证的用户,则应拒绝匿名用户访问。如果页面不依赖于经过身份验证的用户,但仅在成员身份验证时使用成员信息,那么如果用户未经过身份验证,则需要防止调用成员函数(或使用成员数据的任何内容)。
答案 3 :(得分:-1)
问题是糟糕的代码。 请尝试以下步骤: - 在您的网站中,将“开始页面”设置为正确的“登录”页面。 一旦您正确登录,然后登陆页面,您应该能够访问此属性。 如果单击“注销”按钮,并且着陆页可能引用此成员资格信息,则可能会出现相同的错误。
所以解决方法很简单。 1.正确设置起始页。 2.处理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:-";
}
}