Pregunta

No puedo entender cómo usar el método Profile.GetProfile () en una clase de biblioteca. Intenté usar este método en un Page.aspx.cs y funcionó perfectamente.

¿Cómo puedo hacer que un método que funciona en page.aspx.cs funcione en la biblioteca de clases?

¿Fue útil?

Solución

En ASP.NET, Profile es un enlace al HttpContext.Current.Profile , que devuelve un objeto generado dinámicamente de tipo ProfileCommon, derivado de System.Web.Profile.ProfileBase .

ProfileCommon aparentemente incluye un método GetProfile (string username), pero no lo encontrará documentado oficialmente en MSDN (y no aparecerá en intellisense en visual studio) porque la mayor parte de la clase ProfileCommon se genera dinámicamente cuando su aplicación ASP.NET se compila (la lista exacta de propiedades y métodos dependerá de cómo estén configurados los 'perfiles' en su web.config). GetProfile () recibe una mención en este MSDN página , por lo que parece ser real.

Quizás en su clase de biblioteca, el problema es que la información de configuración de web.config no se está recogiendo. ¿Su clase de biblioteca es parte de una solución que incluye una aplicación web, o simplemente está trabajando en la biblioteca de forma aislada?

Otros consejos

¿Ha intentado agregar una referencia a System.Web.dll a su biblioteca de clases y luego:

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

Puede usar ProfileBase, pero pierde la seguridad de escritura. Puede mitigar eso con una conversión cuidadosa y manejo de errores.

    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);
                }
            }        
        }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top