以下のコードはコンパイル時にエラーが発生しませんが、ページを開くとオブジェクト参照がオブジェクトのインスタンスに設定されていないことを示す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>
アーニー
ご返信ありがとうございます。私は、ログイン後にプロフィールを訪問するたびにコードが実行されるというシナリオがあるため、nullではないと思います。私はRequest.IsAuthenticatedをチェックしていません。その例を教えてください。 –
これは本当にcurrentUserが私にはnullであるようです(下の質問の答えであなたが変更したものを見てみると、そうであることが示されるでしょう)。 Guid currentUser = ...という行にブレークポイントを設定し、ウォッチウィンドウでSystem.Threading.Thread.CurrentPrincipal.Identity.Nameをチェックし、それがログインしているユーザーのユーザー名であることを確認してください。 – kmp