2013-07-17 4 views
0

У меня есть мультивизор с 4 видами. Чтобы переключаться между представлениями, я использую 4 кнопки и переключаю индекс активного просмотра multiview на соответствующий вид внутри события щелчка каждой кнопки.ASP.Net - Использование значения переменной в разных событиях нажатия кнопок - VB

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

Что я хочу достичь, так это захватить отметку времени, когда пользователь нажимает кнопку, чтобы перейти к каждому представлению (которое в конечном итоге будет записано в базу данных). Я могу назначить метку время к переменному, используя приведенный ниже код в событии нажатия каждого из 4-х кнопков

Dim phase1TimeStamp as string = DateTime.Now.TimeOfDay.ToString() 

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

Есть ли способ передать эти значения переменных на событие отправки кнопки отправки или есть ли другой способ добиться этого? Благодаря

ответ

2

Самый простой способ сделать это - это, вероятно, сохранить переменную на сеанс, а затем извлечь ее. Вы не сказали, что это ASP.NET Web Forms или MVC, поэтому я дам вам вариант для каждого. MVC имеет несколько различных способов достижения этой цели (ViewData, ViewBag, TempData или непосредственно на сеанс). Я не совсем так знаком с Web Forms, но вы можете как минимум сохранить сессию.

Web Forms

сохранить на сессии:

HttpContext.Current.Session("phase1TimeStamp") = phase1TimeStamp.ToString() 

, чтобы получить его (возможно, придется бросить его, в зависимости от типа и настроек VB):

Dim myVar as String = HttpContext.Current.Session("phase1TimeStamp") 

MVC

сохранить на сессии:

Session("phase1TimeStamp") = phase1TimeStamp.ToString() 

для его получения:

Dim myVar as String = Session("phase1TimeStamp") 

заметку о MVC: Если вы хотите, чтобы работать через несколько сеансов (IE, для различных пользователей или даже для того же пользователь, но с несколькими открытыми вкладками), вам нужно будет добавить идентификатор («phase1TimeStamp») в этом случае с каким-то уникальным идентификатором.

+0

Спасибо Дуглас. Делает смысл и отлично работает! Я раньше не работал с кешированием, поэтому считаю, что это очень полезно. Есть ли какие-либо очистки и т. Д. После использования при использовании кешей? – Jimsan

+0

IIS будет обрабатывать очистку для вас после окончания сеанса. Вам не нужно ничего делать, если вы не хотите удалить его из сеанса вручную по какой-либо причине. –

+0

OK, понимает. Я не буду делать это вручную, если IIS позаботится об этом :-) – Jimsan

1

Вы можете сохранять значения в кэше Session, например:

Session("MultiView1_Clicked_DateTime") = DateTime.Now.TimeOfDay.ToString() 
Session("MultiView2_Clicked_DateTime") = DateTime.Now.TimeOfDay.ToString() 
Session("MultiView3_Clicked_DateTime") = DateTime.Now.TimeOfDay.ToString() 
Session("MultiView4_Clicked_DateTime") = DateTime.Now.TimeOfDay.ToString() 

Значение Session будет существовать в памяти между запросами страниц.

Примечание: вы можете называть ключ Session тем, что хотите, но чтобы получить значение обратно, вам нужно точно соответствовать этому ключевому названию. Кроме того, все в Session хранится как Object, поэтому вам нужно будет присвоить значение String, когда вы хотите получить значение.

+0

Я считаю, что ключи/индексы в VB нуждаются в обычных скобках вместо квадратных скобок (что является способом C#). –

+0

Ах да, спасибо. Слишком много переключений контекста C#/VB.NET. LOL Обновление ответа. –

+1

Спасибо. Сегодня я узнал что-то новое :-) – Jimsan

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