Доступ к profile.newproperty в веб-приложениях MVC

Я недавно задал этот вопрос Как сохранить выбор пользователя (например, выбор темы). и начал изучать профили ASP.NET и их свойства в веб-конфигурации. Я попробовал ответ по ссылке, но мне не удалось получить доступ к profile.newproperty

Как назначить значения профиля? Этот вопрос указывает на то, что веб-приложения не поддерживают профиль из коробки, и необходимо создать собственную модель на основе ProfileBase. На вопрос был дан ответ в 2009 году, и я хотел бы знать, если это все тот же случай.

В веб-приложении ASP.NET 4.0 я могу получить доступ к profile.newproperty со свойством, которое я определил в разделе в файле web.config, без необходимости кодировать C#, кроме случаев, когда к нему обращаются.

1 ответ

Решение

Я только что увидел ваш вопрос, да, вы правы, ответ, который я разместил, был связан с веб-сайтами и, следовательно, он не работает с веб-приложениями или MVC

Здесь я покажу вам код для работы с профилями в MVC, используя анонимные и аутентифицированные пользовательские профили

Выход

Анонимный пользователь - профиль еще не настроен

Анонимный пользователь - набор профилей

Аутентифицированный пользователь - профиль перенесен

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

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;
    }
}

Домашний контроллер

    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");
    }

Индексный вид

@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" />
}

И, наконец, если вы являетесь анонимным пользователем, вы можете иметь свой собственный профиль, однако после регистрации на сайте вам необходимо перенести текущий профиль, чтобы использовать его с новой учетной записью. Это связано с тем, что членство в ASP.Net создает новый профиль при входе пользователя в систему.

Global.asax, код для переноса профилей

    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);
    }
Другие вопросы по тегам