Как сохранить выбор пользователя (например: выбор темы)
Извините за неоднозначный вопрос, но здесь я иду.
На каждой странице есть частичное представление, отображающее различные варианты темы. Эти темы - просто разные классы 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>