5

NCCMembershipUser次のコードを使用してデータを入力しようとしています:

string name = User.Identity.Name;

NCCMembershipUser currentUser = (NCCMembershipUser)NCCMembershipProvider.GetUser(name, true);

currentUser.Salutation = GenderSelect.SelectedValue;
currentUser.FirstName = TextBoxFirstName.Text;
currentUser.LastName = TextBoxLastName.Text;
currentUser.Position = TextBoxPosition.Text;
...

try
{
    NCCMembershipProvider u = (NCCMembershipProvider)Membership.Provider;
    u.UpdateUser(currentUser);
}

「非静的フィールド、メソッド、またはプロパティ 'System.Web.Security.MembershipProvider.GetUser(string, bool)' にはオブジェクト参照が必要です」というエラーが表示されます。

代わりにMembership.GetUser()(name文字列なしで) を使用して現在のユーザーにアクセスすると、キャスト エラーが発生し、GetUser()オーバーライドできないように見えます。

編集:

表示されるキャスト エラーは、「[A]NCC.App_Code.NCCMembershipProvider は [B]NCC.App_Code.NCCMembershipProvider にキャストできません」です。

4

2 に答える 2

3

このエラーは、GetUserメソッドがstaticNCCMembershipProviderではないことを示しているため、クラスのインスタンスなしでは呼び出すことができません。

メソッドの早い段階でプロバイダーを取得する必要があります。

string name = User.Identity.Name;
NCCMembershipProvider u = (NCCMembershipProvider)Membership.Provider;

NCCMembershipUser currentUser = (NCCMembershipUser)u.GetUser(name, true);

currentUser.Salutation = GenderSelect.SelectedValue;
currentUser.FirstName = TextBoxFirstName.Text;
currentUser.LastName = TextBoxLastName.Text;
currentUser.Position = TextBoxPosition.Text;
// ...

try
{
    u.UpdateUser(currentUser);
}
于 2012-06-14T22:10:25.197 に答える
1

表示されるキャスト エラーは、「[A]NCC.App_Code.NCCMembershipProvider は [B]NCC.App_Code.NCCMembershipProvider にキャストできません」です。

このエラーについては、フォルダにそのクラスがないことを確認してくださいApp_Code。ある場合は、新しいフォルダなどの別の場所に移動してください。Membership

これにより、アプリが 2 つの異なる DLL を一時的な asp.net フォルダー内の 2 つの異なる場所にコンパイルするため、キャストの問題が処理されます。

于 2012-06-16T03:45:50.183 に答える