से पहले किसी नए लॉग-इन किए गए उपयोगकर्ता की प्रोफ़ाइल को लोड करने के लिए कैसे मैंने एक एएसपी.नेट एमवीसी 2 प्रोजेक्ट शुरू किया और मैं स्वचालित रूप से जेनरेट किए गए कोड से बाहर हूं।रीडायरेक्ट
समस्या जो मैं अनुभव कर रहा हूं वह यह है कि उपयोगकर्ता लॉग इन होने के बाद, ऐसा लगता है कि नए लॉग-इन किए गए उपयोगकर्ता की प्रोफ़ाइल HttpContext
में लोड नहीं की गई है, इसलिए मुझे संदेश के साथ ProviderException
मिलता है अज्ञात उपयोगकर्ताओं के लिए सेट नहीं किया जा सकता है "जब वर्तमान उपयोगकर्ता की प्रोफ़ाइल में संपत्ति मान सेट करने का प्रयास किया जा रहा है।
बाद केवल बादलॉगऑनटैब कार्रवाई के लिए, विजुअल वेब डेवलपर 2010 एक्सप्रेस मूल रूप से उत्पन्न:
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
if (MembershipService.ValidateUser(model.UserName, model.Password))
{
FormsService.SignIn(model.UserName, model.RememberMe);
//...
जहां FormsService
प्रकार FormsAuthenticationService
(भी उत्पन्न किया था) के नियंत्रक की संपत्ति है:
public class FormsAuthenticationService : IFormsAuthenticationService
{
public void SignIn(string userName, bool createPersistentCookie)
{
if (String.IsNullOrEmpty(userName)) throw new ArgumentException("Value cannot be null or empty.", "userName");
FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
}
public void SignOut()
{
FormsAuthentication.SignOut();
}
}
FormsService.SignIn(model.UserName, model.RememberMe)
लाइन के बाद मैं यह मान रहा था कि नए लॉग-इन खाते की जानकारी तुरंत नियंत्रक के लिए उपलब्ध होगी, लेकिन ऐसा नहीं लगता है। यदि, उदाहरण के लिए, मैं फॉर्म सेवा # साइनइन पर कॉल के नीचे profile.SetPropertyValue("MyProfileProperty", "test")
जोड़ता हूं, तो मुझे ProviderException
मिलता है "यह गुण अज्ञात उपयोगकर्ताओं के लिए सेट नहीं किया जा सकता"।
मैं HttpContext
में नए लॉग-इन किए गए उपयोगकर्ता की प्रोफ़ाइल कैसे लोड करूं ताकि मैं अगले अनुरोध से पहले अपनी प्रोफ़ाइल में संपत्ति मूल्य निर्धारित कर सकूं?
यह एक नई प्रोफ़ाइल बनाएगा, मौजूदा लोड नहीं करेगा। –
नहीं, आप यह मानना गलत हैं कि यह एक मौजूदा प्रोफ़ाइल लोड करेगा। कोशिश करके देखो। –
"मुझे कुछ समय लगेगा जब तक मुझे एहसास हुआ कि प्रोफ़ाइलबेस के साथ प्रोफाइलबेस.क्रेट() को कॉल करना तर्क के रूप में उपयोगकर्ता नाम के साथ एक लुकअप करता है और वास्तव में उस उपयोगकर्ता नाम से जुड़े डेटा को पुनर्प्राप्त करता है। जहां तक मेरा संबंध है, इस विधि को कॉल करना() भ्रामक है, मैं लोड() या प्राप्त() प्राप्त करने की उम्मीद करेंगे। " इस प्रश्न का उत्तर देखें: http://stackoverflow.com/questions/1126719/asp-net-sql-profile-provider-does-the-profilebase-create-method-hit-db –