Передача данных из одного события нажатия кнопки в другое событие нажатия кнопки

Ниже мой код. Я хочу зафиксировать разницу между двумя временными метками при двух разных нажатиях кнопок, т. Е. Я хочу, чтобы «startTime» события btnStartTime_click использовалось в событии btnEndTime_click.

    protected void btnStartTime_Click(object sender, EventArgs e)
    {
        var startTime = DateTime.Now;            
        lblStartTime.Text = startTime.ToString("HH:mm:ss tt");            
    }

    protected void btnEndTime_Click(object sender, EventArgs e)
    {            
        var workDuration = DateTime.Now.Subtract(startTime).TotalMinutes;
        lblEndTime.Text = ("The Work duration is "+workDuration);

    }

person Kash    schedule 28.11.2013    source источник
comment
Это для клиентского приложения или веб-приложения?   -  person user1429080    schedule 28.11.2013
comment
Это веб-приложение....   -  person Kash    schedule 28.11.2013


Ответы (2)


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

Вот быстрый пример, который должен работать с использованием ViewState:

private const string StartTimeViewstateKey = "StartTimeViewstateKey";
protected void btnStartTime_Click(object sender, EventArgs e)
{
    var startTime = DateTime.Now;
    ViewState[StartTimeViewstateKey] = startTime.ToString(CultureInfo.InvariantCulture);
}
protected void btnEndTime_Click(object sender, EventArgs e)
{
    var startTime = DateTime.Parse((string)ViewState[StartTimeViewstateKey], CultureInfo.InvariantCulture);

    var workDuration = DateTime.Now.Subtract(startTime).TotalMinutes;
    lblEndTime.Text = ("The Work duration is " + workDuration);
}

В качестве альтернативы вы можете использовать состояние сеанса:

private const string StartTimeSessionKey= "StartTimeSessionKey";
protected void btnStartTime_Click(object sender, EventArgs e)
{
    var startTime = DateTime.Now;
    Session[StartTimeSessionKey] = startTime;
}
protected void btnEndTime_Click(object sender, EventArgs e)
{
    var startTime = (DateTime)Session[StartTimeSessionKey];

    var workDuration = DateTime.Now.Subtract(startTime).TotalMinutes;
    lblEndTime.Text = ("The Work duration is " + workDuration);
}
person user1429080    schedule 28.11.2013
comment
Здравствуйте, user1429080, спасибо за ответ. Нашел это очень полезным. - person Kash; 28.11.2013

Просто сделайте свой startTime вне локальной области видимости:

DateTime startTime;
protected void btnStartTime_Click(object sender, EventArgs e)
{
    startTime = DateTime.Now;            
    lblStartTime.Text = startTime.ToString("HH:mm:ss tt");            
}

protected void btnEndTime_Click(object sender, EventArgs e)
{            
    var workDuration = DateTime.Now.Subtract(startTime).TotalMinutes;
    lblEndTime.Text = ("The Work duration is "+workDuration);

}
person King King    schedule 28.11.2013
comment
Привет, Кинг, спасибо за ответ. Но это не решило мою проблему. Если я объявляю startTime снаружи и использую его в событии btnEndTime_Click, то я не могу получить значение startTime, захваченное в событии btnStartTime_Click. Вместо этого в качестве начального значения берется значение startTime, т. е. 01.01.0001, 00:00. - person Kash; 28.11.2013
comment
@Kash, это значение по умолчанию, если вы сначала нажмете btnEndTime, это произойдет, но обычно вам нужно сначала нажать на btnStartTime. - person King King; 28.11.2013
comment
Спасибо за ответ. Наконец-то я понял, почему это происходит. Каждый раз, когда я нажимал на btnEndTime, страница возвращалась. Поэтому у меня всегда было значение по умолчанию в этой переменной. Я просто изменил объявление как статическое, и все было в порядке. - person Kash; 28.11.2013
comment
@Kash Имейте в виду, что если вы используете это решение и сделаете startTime статическим, то ВСЕ ПОЛЬЗОВАТЕЛИ вашего веб-сайта будут использовать один и тот же startTime. Если пользователь А нажимает «Пуск», затем пользователь Б нажимает «Пуск» через 2 минуты, а затем пользователь А нажимает «Окончание», А увидит время начала от пользователя Б. Не используйте статические переменные на веб-страницах, если вы действительно не уверены в том, что делаете. . - person user1429080; 28.11.2013