2013-11-28 59 views
1

以下是我的代码。我想在两个不同的按钮点击中捕获两个时间戳之间的差异,即,我想要在btnEndTime_click事件中使用btnStartTime_click事件的“startTime”。将数据从一个按钮单击事件传递到另一个按钮单击事件

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); 

    } 
+0

这是客户端应用程序或Web应用程序? – user1429080

+0

它是一个web应用程序.... – Kash

回答

2

因为这涉及到一个web应用程序,您必须在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); 
} 
+0

嗨** user1429080 **,感谢您的回复。发现它非常有用。 – Kash

4

只是让你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); 

} 
+0

嗨,国王,谢谢你的回应。但是这并没有解决我的问题。如果我在外部声明“startTime”并在btnEndTime_Click事件中使用它,那么我无法获取在btnStartTime_Click事件中捕获的“startTime”的值。取而代之,将startTime的值作为初始值,即“01/01/0001 12:00 AM”。 – Kash

+0

@Kash这是默认值,如果你先点击'btnEndTime'将会发生,但通常你必须先点击'btnStartTime'。 –

+0

感谢您的回复。我终于明白为什么会发生这种情况。每次点击** btnEndTime **时,页面都会回传。所以我总是拥有该变量的默认值。我只是将声明更改为静态,并且每件事都很好。 – Kash