Как сохранить выбор пользователя (например: выбор темы)

Извините за неоднозначный вопрос, но здесь я иду.

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

Я предполагаю, что это должно быть сделано на стороне клиента, и все, что я мог придумать, это что-то вроде куки. К сожалению, я еще не экспериментировал с ними в ASP.NET и не могу придумать правильную формулировку для поиска в Google, поскольку это такая базовая концепция.

Если кто-нибудь может указать мне правильное направление, я был бы признателен. Спасибо

1 ответ

Решение

Вы можете использовать концепцию, известную как профиль

С помощью профилей вы можете объявить свойства, которые вы хотели бы предоставить своим пользователям, и это работает для анонимных пользователей.

В основном свойства профиля хранятся в файлах cookie, поэтому вы можете настроить время их истечения и другие параметры, связанные с файлами cookie.

Свойства вашего профиля компилируются как часть компиляции элементов верхнего уровня - жизненного цикла компиляции AKA в ASP.Net, поэтому они будут представлены как свойства со строгой типизацией через Profile учебный класс

Например:

Настройки Web.config

<configuration>
  <system.web>
    <anonymousIdentification enabled="true"/>
    <profile defaultProvider="AspNetSqlProfileProvider" enabled="true">
      <properties>
        <add name="FirstName"/>
        <add name="LastName"/>
        <add allowAnonymous="true" name="LastVisit" type="System.Nullable`1[System.DateTime]"/>
        <group name="Address">
          <add name="Street"/>
          <add name="PC"/>
          <add name="InternalNumber" type="System.Int32" defaultValue="0"/>
        </group>
        <add name="EmployeeInfo" serializeAs="Binary" type="EmployeeInfo"/>
      </properties>
    </profile>
  </system.web>
</configuration>

Использование профиля в коде (Global.asax для этого примера)

void Application_EndRequest(object sender, EventArgs e)
{
    if (Profile != null)
    {
        Profile.LastVisit = DateTime.Now;
        Profile.Save();
    }
}

Кроме того, ASP.Net позволяет получить доступ к свойствам в JavaScript, используя компоненты Microsoft AJAX:

Web.config

<configuration>
  <system.web.extensions>
    <scripting>
      <webServices>
        <profileService enabled="true" readAccessProperties="LastVisit" writeAccessProperties="LastVisit"/>
        <jsonSerialization maxJsonLength="102400" recursionLimit="100" />
      </webServices>
    </scripting>
  </system.web.extensions>
</configuration>

ASPX

<script type="text/javascript" src="Scripts/jquery-1.7.2.min.js"></script>
<script type="text/javascript">
    $(function () {
        $("#profile").click(function () {
            Sys.Services.ProfileService.load();
            Sys.Services.ProfileService.properties.LastVisit = new Date();
            Sys.Services.ProfileService.save(
                null,
                function (m) {
                    alert(m);
                },
                function (e) {
                    alert(e);
                },
                null
            );
        });

        Sys.Services.ProfileService.load(null, function (r) {
            $("#res").append("<br/>");
            $("#res").append(Sys.Services.ProfileService.properties.LastVisit.toString());
            $("#res").append("<br/>");
        }, function (m) {
            $("#res").append(m.get_message());
        }, null);

    });
</script>

<asp:ScriptManager runat="server" ID="sm">
    <AuthenticationService />
    <ProfileService />
    <RoleService />
</asp:ScriptManager>
Другие вопросы по тегам