Pregunta

Hace poco hice esta pregunta Cómo persistir la selección de usuarios de Anon(Ej: selección de tema) .y comenzó a conocer los perfiles ASP.NET y sus propiedades en la configuración web.Probé la respuesta del enlace, pero no pude acceder a Perfil.NewProperty

¿Cómo asignar valores de perfil? Esta pregunta especifica que las aplicaciones web no admiten el perfil de la casilla y se debe crear un modelo personalizado basado en la base de perfil.La pregunta fue respondida en 2009 y quería saber si esto sigue siendo el mismo caso.

En una aplicación web ASP.NET 4.0, puedo acceder a un perfil.Newproperty con una propiedad que definí en la sección en la web.config sin necesidad de código C # excepto cuando se accede.

¿Fue útil?

Solución

Acabo de ver su pregunta, sí, usted tiene razón, la respuesta que publiqué estaba relacionada con los sitios web y, por lo tanto, no funciona con aplicaciones web o MVC

Aquí le mostraré código para trabajar con perfiles en MVC utilizando perfiles de usuario anónimos y autenticados

Salida

usuario anónimo - no hay juego de perfil todavía

ingrese la descripción de la imagen aquí

usuario anónimo - Conjunto de perfiles

ingrese la descripción de la imagen aquí

usuario autenticado - perfil migrado

ingrese la descripción de la imagen aquí

web.config

<anonymousIdentification enabled="true"/>
<profile inherits="ProfileInWebApplicationMVC1.UserProfile">
  <providers>
    <clear/>
    <add name="AspNetSqlProfileProvider" type="System.Web.Profile.SqlProfileProvider" connectionStringName="ApplicationServices" applicationName="/" />
  </providers>
</profile>

UserProFile Class

public class UserProfile : ProfileBase
{
    public static UserProfile GetProfile()
    {
        return HttpContext.Current.Profile as UserProfile;
    }

    [SettingsAllowAnonymous(true)]
    public DateTime? LastVisit
    {
        get { return base["LastVisit"] as DateTime?; }
        set { base["LastVisit"] = value; }
    }

    public static UserProfile GetProfile(string userID)
    {
        return ProfileBase.Create(userID) as UserProfile;
    }
}

Controlador de Inicio

    public ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        var p = UserProfile.GetProfile();

        return View(p.LastVisit);
    }

    [HttpPost]
    public ActionResult SaveProfile()
    {
        var p = UserProfile.GetProfile();

        p.LastVisit = DateTime.Now;
        p.Save();

        return RedirectToAction("Index");
    }

Vista de índice

@if (!this.Model.HasValue)
{
    @: No profile detected
}
else
{
    @this.Model.Value.ToString()
}

@using (Html.BeginForm("SaveProfile", "Home"))
{
    <input type="submit" name="name" value="Save profile" />
}

y, finalmente, cuando usted es un usuario anónimo puede tener su propio perfil , sin embargo, una vez que se registre en el sitio, debe registrarlo su perfil actual para ser utilizado con su nueva cuenta. Esto se debe a la membresía de ASP.NET, crea un nuevo perfil cuando un usuario registra

Global.asax, código para migrar perfiles

    public void Profile_OnMigrateAnonymous(object sender, ProfileMigrateEventArgs args)
    {
        var anonymousProfile = UserProfile.GetProfile(args.AnonymousID);
        var f = UserProfile.GetProfile(); // current logged in user profile

        if (anonymousProfile.LastVisit.HasValue)
        {
            f.LastVisit = anonymousProfile.LastVisit;
            f.Save();
        }

        ProfileManager.DeleteProfile(args.AnonymousID);
        AnonymousIdentificationModule.ClearAnonymousIdentifier();
        Membership.DeleteUser(args.AnonymousID, true);
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top