Accès au profil.NewProperty dans les applications Web MVC
-
13-12-2019 - |
Question
J'ai récemment posé cette question Comment persister une sélection d'utilisateur Anon(ex: sélection de thème) .et a commencé à apprendre sur les profils ASP.NET et leurs propriétés dans la configuration Web.J'ai essayé la réponse du lien mais je n'ai pas pu accéder au profil.NewProperty
Comment attribuer des valeurs de profil? Cette question spécifie que les applications Web ne prennent pas en charge le profil hors de la boîte et un modèle personnalisé basé sur ProfileBase doit être créé.La question a été répondue en 2009 et je voulais savoir si cela reste le même cas.
dans une application Web ASP.NET 4.0 Puis-je accéder au profil.Newproperty avec une propriété que j'ai définie dans la section dans le web.config sans avoir besoin de coder C # sauf en l'accédant.
La solution
Je viens de voir votre question, oui vous avez raison, la réponse que j'ai postée était liée à des sites Web et donc, cela ne fonctionne pas avec les applications Web ou MVC
Ici, je vais vous montrer du code pour travailler avec des profils dans MVC en utilisant des profils utilisateur anonymes et authentifiés
Sortie
Utilisateur anonyme - Aucun modèle de profil pourtant
Utilisateur anonyme - Set de profil
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;
}
}
Contrôleur à domicile
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");
}
Vue d'index
@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" />
}
et enfin, lorsque vous êtes un utilisateur anonyme , vous pouvez avoir votre propre profil , une fois que vous vous êtes inscrit sur le site, vous devez migrer votre profil actuel pour être utilisé avec votre nouveau compte. En effet, l'adhésion ASP.NET crée un nouveau profil lorsqu'un utilisateur se connecte à
global.asax, code pour migrer les profils
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);
}