سؤال

لقد قمت بإنشاء نموذج الاشتراك الخاص بي وإنشاء المستخدم باستخدام فئة العضوية.

MembershipCreateStatus status;
MembershipUser newUser = Membership.CreateUser(tbxUsername.Text, 
                                               tbxPassword.Text, 
                                               tbxEmail.Text, 
                                               null, null, true, out status);

بعد إنشاء المستخدم باستخدام الكود about، أحاول تعيين بعض خصائص الملف الشخصي مثل ذلك

Profile.CountryCode = ddlCountry.SelectedValue;
Profile.DisplayName = tbxDisplayName.Text;
Profile.Save();

ومع ذلك أحصل على رسالة الاستثناء التالية

لا يمكن تعيين هذه الخاصية للمستخدمين المجهولين.

أي أفكار لماذا أحصل على هذا؟

هل كانت مفيدة؟

المحلول

أعتقد أن هذا لأنك لم تجلب الملف الشخصي أولاً (من قاعدة البيانات/مهما كان ما تستخدمه).

قد يبدو الكود الخاص بك كما يلي:

ProfileCommon p = Profile.GetProfile(tbxUsername.Text);
p.CountryCode = ddlCountry.SelectedValue;
p.DisplayName = tbxDisplayName.Text;
p.Save();

نصائح أخرى

لقد واجهت نفس الخطأ وكان ذلك لأنني كنت أقوم فقط بتعيين ملف authCookie، ولكن لا أقوم بتعيين مستخدم httpcontext.هوذا:

HttpCookie authCookie = HttpContext.CurrentRequest.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
    //Extract the forms authentication cookie
    FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

    // If caching roles in userData field then extract
    string[] roles = authTicket.UserData.Split(new char[] { '|' });

    // Create the IIdentity instance
    IIdentity id = new FormsIdentity(authTicket);

    // Create the IPrinciple instance
    IPrincipal principal = new GenericPrincipal(id, roles);

    // Set the context user 
    HttpContext.Current.User = principal;
}

شكر خاص ل هذا المشنور للكود!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top