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.

Était-ce utile?

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

Entrez la description de l'image ici

Utilisateur anonyme - Set de profil

Entrez la description de l'image ici

Utilisateur authentifié - Profil migré

Entrez la description de l'image ici

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);
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top