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 が null でないことを確認する必要があります。

if ( currentUser != null )
{
/* do stuff here */
}
else
{
/* do something else, like show an error message perhaps */
}
于 2012-03-11T08:51:50.463 に答える
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 に答える
0

ログイン ユーザーが必要なページへのアクセスを匿名ユーザーに許可しているようです。ユーザーがまだログインしていない場合、ユーザーを取得することはできません。

セキュリティは、承認と認証の 2 つの部分で構成されます。認証はログインしていますが、承認は権限のないユーザー (まだログインしていないユーザーや、適切なロールが割り当てられていないユーザーなど) によるページへのアクセスを拒否しています。

ページが認証されたユーザーに依存している場合は、匿名ユーザーのアクセスを拒否する必要があります。ページが認証されたユーザーに依存せず、認証されている場合にメンバー情報を使用するだけの場合、ユーザーが認証されていない場合にメンバー関数 (またはメンバー データを使用するもの) を呼び出さないようにする必要があります。

于 2012-03-11T09:42:20.277 に答える
-1

問題は悪いコードです。次の手順を試してください:- Web サイトで、「開始ページ」を正しい「ログイン」ページに設定します。ログインして正しくページにアクセスすると、このプロパティにアクセスできるようになります。ログアウト ボタンをクリックすると、ランディング ページがこのメンバーシップ情報を参照している可能性があり、同じエラーが発生する可能性があります。

したがって、回避策は簡単です。1.開始ページを正しく設定します。2. 2 つのケースを処理します。- ユーザーがログインしており、ユーザーが効率的にログインしていません。例は次のとおりです。

protected void Page_Load(オブジェクト送信者, 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 に答える