2009-09-18 4 views
4

Я не могу выяснить, как использовать Profile.GetProfile() способ в библиотеке класс. Я попытался использовать этот метод в файле page.aspx.cs, и он отлично работал.Как использовать Profile.GetProfile() в классе библиотеки?

Как создать метод, который работает в page.aspx.cs, работать в библиотеке классов.

ответ

2

В ASP.NET, профиль хук в HttpContext.Current.Profile собственности, который возвращает динамически созданный объект типа ProfileCommon, полученный от System.Web.Profile.ProfileBase.

Профиль, как правило, включает в себя метод GetProfile (имя строки), но вы не найдете его официально зарегистрированным в MSDN (и он не появится в intellisense в visual studio), потому что большая часть класса ProfileCommon динамически генерируется, когда ваш ASP.NET приложение составлено (точный список свойств и методов будет зависеть от того, как «профили» настроены в вашем web.config). GetProfile() does get a mention on this MSDN page, так что кажется реальным.

Возможно, в классе библиотеки проблема заключается в том, что информация о конфигурации из web.config не подбирается. Является ли ваш класс библиотеки частью Solultion, который включает веб-приложение, или вы просто работаете над библиотекой изолированно?

+0

Библиотека является частью решения –

+0

В вашем классе библиотеки выполняются другие свойства объекта «Профиль». OK , или весь объект Profile не работает? – codeulike

1

Вы пытались добавить ссылку на System.Web.dll в библиотеку классов, а затем:

if (HttpContext.Current == null) 
{ 
    throw new Exception("HttpContext was not defined"); 
} 
var profile = HttpContext.Current.Profile; 
// Do something with the profile 
+0

HttpContext.Current.Profile только метод относительно текущего профиля, и не содержит GetProfile() Метод –

+0

Если бы я попытался HttpContext.Current.Profile я, очевидно, добавлена ​​System.Web Dll моей библиотеки классов сво как HttpContext.Current.Profile –

+0

Не могли бы вы указать на документацию MSDN метода GetProfile, о котором вы говорите? Я не могу найти такой метод. –

0

Вы можете использовать ProfileBase, но вы потеряете безопасность типа. Вы можете смягчить это при тщательной обработке и обработке ошибок.

string user = "Steve"; // The username you are trying to get the profile for. 
    bool isAuthenticated = false; 

     MembershipUser mu = Membership.GetUser(user); 

     if (mu != null) 
     { 
      // User exists - Try to load profile 

      ProfileBase pb = ProfileBase.Create(user, isAuthenticated); 

      if (pb != null) 
      { 
       // Profile loaded - Try to access profile data element. 
       // ProfileBase stores data as objects in a Dictionary 
       // so you have to cast and check that the cast succeeds. 

       string myData = (string)pb["MyKey"]; 

       if (!string.IsNullOrWhiteSpace(myData))    
       { 
        // Woo-hoo - We're in data city, baby! 
        Console.WriteLine("Is this your card? " + myData); 
       } 
      }   
     }