2013-11-17 4 views
0

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

Имя, второе имя -> это текстовые поля. Город, штат -> Выпадающий список.

Когда пользователь вводит имя и выбирает город и штат, если пользователь нажимает кнопку «Обновить», любые введенные данные и выбранные детали исчезнут. Как сохранить эти данные, даже браузер обновляется.

Спасибо, Pacchi

+0

Многие люди обновляют страницу, чтобы очистить поля в форме, поэтому это может привести к нарушению удобства использования. В чем проблема, которую вы пытаетесь решить с этим? –

+0

Если у меня есть много элементов управления текстовыми полями для ввода пользователя, и если пользователь уже заполнил его, я не должен потерять эти данные, так как пользователь должен снова ввести все детали. – Pacchi

+0

Ваш проект - веб-формы или MVC? Я дал ответ для Web Forms, но это не хорошо, если вы используете MVC. –

ответ

0

Если вы используете MVC у вас есть soultion к нему. В противном случае вы должны пойти с javascript.

-1

JavaScript:

1) LocalStorage (html5 браузеры только) - вы можете сохранить его как свойство локального учета хранения на страницы

2) сохранить его в куки

3) добавить переменная в URL хэш так что извлекаемый через location.hash после обновления

сессия:

1) сохранить его как Сесси по переменной и получить его через AJAX каждый раз, когда страница загружается

2) сохранить его в куки (могли бы также сделать подход JS, если вы собираетесь COOKIE его)

+0

Проверьте эту ссылку: http: //stackoverflow.com/questions/4825683/how-do-i-create-and-read-a-value-from-cookie –

2

Если вы не сохраните содержимое как они вводятся (либо отправляют их обратно на сервер с AJAX), либо сохраняют их в локальном хранилище или куки-файлы в событии, таком как размытие, тогда запрос обновления не сможет отправлять обратно эти поля.

Вам нужно будет написать код на стороне клиента, чтобы сохранить их и заполнить их еще раз при загрузке страницы, но они действительно должны учитывать, что если вы храните их на локальной машине, тогда они станут потенциальным «игровым» угрозой безопасности, следующие лица, использующие веб-страницу, имеют доступ к данным предыдущих лиц. Также вам нужно подумать о том, как пользователь очищает данные и запускается снова.

Я бы добавил, что если пользователь намеренно нажал F5, то они действительно хотят перезагрузить страницу из своего начального состояния и начать заново. Если вы используете F5 как способ заставить их обновиться, потому что часть обновления страницы нуждается в обновлении, подумайте, что лучше указать кнопку или ссылку на рассматриваемой странице и позволить пользователю щелкнуть по ней, а затем перейти к сделайте вызов AJAX, чтобы обновить эту часть страницы, а не всю страницу.

0

Вы можете использовать таймер в пределах UpdatePanel, чтобы в каждом тике Timer1 вы могли сохранить данные с входа на сеанс.

Например, в следующей разметке:

<div class="row"> 
    <label>First Name:</label> 
    <asp:TextBox ID="FirstNameTextBox" runat="server"></asp:TextBox> 
</div> 
<div class="row"> 
    <label>Last Name:<label> 
    <asp:TextBox ID="LastNameTextBox" runat="server"></asp:TextBox> 
</div> 
<div class="row"> 
    <label>City:</label> 
    <asp:DropDownList ID="CityDropDownList" runat="server"></asp:DropDownList> 
</div> 
<div class="row"> 
    <label>State:</label> 
    <asp:DropDownList ID="StateDropDownList" runat="server"></asp:DropDownList> 
</div> 
<div class="row"> 
    <asp:Button ID="SubmitButton" runat="server" Text="Button" /> 
</div> 
    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 
      <asp:Timer ID="Timer1" runat="server" Enabled="true" Interval="5000" OnTick="Timer1_Tick"></asp:Timer> 
     </ContentTemplate> 
    </asp:UpdatePanel> 

Код позади для этого было бы:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (Session["FirstName"] != null) FirstNameTextBox.Text = Session["FirstName"].ToString(); 
    if (Session["LastName"] != null) LastNameTextBox.Text = Session["LastName"].ToString(); 
    if (Session["City"] != null) CityDropDownList.SelectedValue = Session["City"].ToString(); 
    if (Session["State"] != null) StateDropDownList.SelectedValue = Session["State"].ToString(); 
} 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    Session["FirstName"] = FirstNameTextBox.Text; 
    Session["LastName"] = LastNameTextBox.Text; 
    Session["City"] = CityDropDownList.SelectedValue; 
    Session["State"] = StateDropDownList.SelectedValue; 
} 

Каждый раз, когда Таймер1 клещи, вы можете сохранить данные из полей формы в вашей Session и on Page_Load (...), если в сеансе есть данные, вы можете их автоматически заполнить.

Обязательно удалите данные с сеанса, когда пользователь действительно отправит форму.

+0

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

+0

Что вы имеете в виду, когда говорите, что это несправедливо? Это не самый эффективный подход, который можно принять (учитывая ресурсы), но его довольно легко реализовать. –

+0

Да, я хочу сказать это. Лучше проверить только, если страница обновляется, а не сохраняется в сеансе в течение 5 секунд. @ Codingstill –

Смежные вопросы