Acceso al perfil.NewProperty en aplicaciones web de MVC
-
13-12-2019 - |
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.
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
usuario anónimo - Conjunto de perfiles
usuario autenticado - perfil migrado
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);
}