2012-12-17 9 views
6

सब। मुझे थोड़ा कोडिंग समस्या है जो मुझे आशा है कि आप मेरी मदद कर सकते हैं। मैं अपने काम के लिए स्टॉपवॉच टाइमर बना रहा हूं। मेरा मालिक कंपनी के लिए एक कार्यक्रम बनाना चाहता है जो नियत कार्यों के लिए कर्मचारी समय का ट्रैक रखने में मदद करेगा। मुझे बताया गया था कि मुझे इसे एएसपीनेट का उपयोग करना चाहिए, जिसे मैंने पहले कभी नहीं किया है। मैं टाइमर को एक डिग्री पर काम करने में कामयाब रहा, और यह सत्र को बचाने के अलावा इसे सब कुछ करता है। यह आखिरी चीज मुझे करने की ज़रूरत है कि यदि उपयोगकर्ता विंडो बंद कर देता है या पृष्ठ को फिर से लोड करता है तो टाइमर अभी भी टिक टिक सकता है। मुझे यह पता लगाने का सबसे अच्छा तरीका यह है कि कुकीज़ का उपयोग करना होगा। व्यू स्टेटस स्वयं ठीक काम करता है सिवाय इसके कि यह रीलोड के समय टाइमर वैल्यू को सेव नहीं करता है। और यदि मैं एक टैब में एक नया पेज खोलता हूं तो यह सब खत्म हो जाता है। मुझे पता चला कि कुकीज़ कैसे बनाएं, लेकिन मुझे विश्वास नहीं है कि मैं उनका उपयोग कर रहा हूं। अगर कोई मुझे इस समस्या को समझने में मदद कर सकता है तो मैं इसकी सराहना करता हूं।मैं एएसपीनेट वेब ऐप के साथ काम करने के लिए कुकीज़ कैसे प्राप्त करूं?

यह aspx कोड है (मैं तो बस अनदेखा करें कि क्योंकि मैं टाइमर कि इतना है कि जिस तरह से यह और अधिक सटीक हो जाएगा लागू करने के बारे देखने के लिए कोशिश कर रहा हूँ वहाँ में जावास्क्रिप्ट का एक सा है):

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="NerdcoreTimer._Default" %> 

<asp:Content ID="HeaderContent" runat="server" ContentPlaceHolderID="HeadContent"> 
<script type="text/javascript"> 
    var seconds = 0; 
    var minutes = 0; 
    var hours = 0; 
    var tick; 

    function stopCount() { 
    clearTimeout(t); 
    } 

function startCount() { 
    document.getElementById('seconds').innerHTML = seconds; 
    document.getElementById('minutes').innerHTML = minutes; 
    document.getElementById('hours').innerHTML = hours; 
    seconds = seconds + 1; 
    if (seconds == 60) { 
     seconds = 0; 
     minutes = minutes + 1; 
    } 
    if (minutes == 60) { 
     minutes = 0; 
     hours = hours + 1; 
    } 
    tick = setTimeout("startCount()", 1000) 
} 

function reset() { 
    seconds = 0; 
    minutes = 0; 
    hours = 0; 
    document.getElementById('seconds').innerHTML = seconds; 
    document.getElementById('minutes').innerHTML = minutes; 
    document.getElementById('hours').innerHTML = hours; 
} 

function startTimer() { return $find('Timer1')._startTimer(); } 
function stopTimer() { return $find('Timer1')._stopTimer(); } 
</script> 

012,351:

<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager> 

<div> 
    <table align="center"> 
     <tr> 
      <td> 
       <asp:DropDownList ID="Tasks" runat="server" Width="75px"> 
        <asp:ListItem>Task 1</asp:ListItem> 
        <asp:ListItem>Task 2</asp:ListItem> 
        <asp:ListItem>Task 3</asp:ListItem> 
        <asp:ListItem>Task 4</asp:ListItem> 
        <asp:ListItem>Task 5</asp:ListItem> 
        <asp:ListItem>Task 6</asp:ListItem> 
       </asp:DropDownList> 
      </td> 
      <td style="text-align:center"> 
       <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
        <ContentTemplate> 
         <asp:Timer ID="Timer1" runat="server" Enabled="false" Interval="879" OnTick="Timer1_Tick"></asp:Timer> 
         <asp:Label ID="hour2" runat="server" Text="0"></asp:Label> 
         <asp:Label ID="hour1" runat="server" Text="0"></asp:Label> 
         <asp:Label ID="colon1" runat="server" Text=":"></asp:Label> 
         <asp:Label ID="min2" runat="server" Text="0"></asp:Label> 
         <asp:Label ID="min1" runat="server" Text="0"></asp:Label> 
         <asp:Label ID="colon2" runat="server" Text=":"></asp:Label> 
         <asp:Label ID="sec2" runat="server" Text="0"></asp:Label> 
         <asp:Label ID="sec1" runat="server" Text="0"></asp:Label> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </td> 
      <td> 
       <asp:Button ID="Start" runat="server" OnClientClick="startTimer()" Text="Start" Width="75px" OnClick="Start_Click" /> 
      </td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td> 
       <asp:Button ID="Stop" runat="server" OnClientClick="stopTimer()" Text="Stop" Width="75px" OnClick="Stop_Click" /> 
       <asp:Button ID="Reset" runat="server" Text="Reset" Width="75px" OnClick="Reset_Click" /> 
      </td> 
     </tr> 
    </table> 
</div> 
&nbsp 
<div> 
    <table align="center"> 
     <tr> 
      <td style="text-align:center"> 
      <asp:UpdatePanel ID="UpdatePanel2" runat="server"> 
        <ContentTemplate> 
         <asp:Label ID="startDate" runat="server" Text="Start Date: "></asp:Label> 
         <asp:Label ID="startTime" runat="server" Text=""></asp:Label> 
         <hr /> 
         <asp:Label ID="stopDate" runat="server" Text="Stop Date: "></asp:Label> 
         <asp:Label ID="stopTime" runat="server" Text=""></asp:Label> 
         <hr /> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </td> 
     </tr> 
    </table> 
</div> 
&nbsp 
<div> 
    <table align="center"> 
     <tr> 
      <td style="text-align:center"> 
      <asp:UpdatePanel ID="UpdatePanel3" runat="server"> 
       <ContentTemplate> 
         <asp:Label ID="hours" runat="server" ></asp:Label> 
         <asp:Label ID="minutes" runat="server" ></asp:Label> 
         <asp:Label ID="seconds" runat="server" ></asp:Label> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      </td> 
      <td> 
      <asp:UpdatePanel ID="UpdatePanel4" runat="server"> 
       <ContentTemplate> 
        <asp:Button ID="Button1" runat="server" OnClientClick="startCount()" Text="Start" Width="75px"/> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      </td> 
     </tr> 
     <tr> 
      <td>&nbsp;</td> 
      <td> 
      <asp:UpdatePanel ID="UpdatePanel5" runat="server"> 
       <ContentTemplate> 
        <asp:Button ID="Button2" runat="server" OnClientClick="stopCount()" Text="Stop" Width="75px"/> 
        <asp:Button ID="Button3" runat="server" OnClientClick="reset()" Text="Reset" Width="75px"/> 
       </ContentTemplate> 
      </asp:UpdatePanel> 
      </td> 
     </tr> 
    </table> 
</div> 

यह सी # में फ़ाइल के पीछे कोड है

using System; 
using System.Data.SqlClient; 
using System.Configuration; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Timers; 

namespace NerdcoreTimer 
{ 
    public partial class _Default : System.Web.UI.Page 
    { 
    public int time_sec; 
    public int time_min; 
    public int time_hour; 
    public string start; 
    public string stop; 

    HttpCookie cookieStartDate = new HttpCookie("startDate"); 
    HttpCookie cookieTask = new HttpCookie("task"); 
    HttpCookie cookieSec = new HttpCookie("seconds"); 
    HttpCookie cookieMin = new HttpCookie("minutes"); 
    HttpCookie cookieHr = new HttpCookie("hours"); 
    HttpCookie cookieStopDate = new HttpCookie("stopDate"); 

    //SQL connection string 
    System.Data.SqlClient.SqlConnection sqlConnection1 = 
    new System.Data.SqlClient.SqlConnection("Server=*****;Database=*****;User Id=*****;Password=*****;"); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     //Check to see if there are cookies 
     if (Request.QueryString["startDate"] != null) 
     { 
      ReadCookie_StartDate(); 
     } 
     if ((Request.QueryString["seconds"] != null) && (Request.QueryString["minutes"] != null) && (Request.QueryString["hours"] != null)) 
     { 
      ReadCookie_Timer(); 
      //If the cookie values for seconds, minutes, and hours is not null, enable the timer and disable and enable the proper controls 
      Timer1.Enabled = true; 
      Stop.Enabled = true; 

      Start.Enabled = false; 
      Tasks.Enabled = false; 
     } 
     if (Request.QueryString["stopDate"] != null) 
     { 
      ReadCookie_StopDate(); 
     } 

     //Open the sql connection 
     sqlConnection1.Open(); 

     //Disable these controls on page load 
     Stop.Enabled = false; 
     Reset.Enabled = false; 

     //Make sure the timer is disabled if starting a new session 
     if (!IsPostBack) 
     { 
      Timer1.Enabled = false; 
     } 
    } 

    protected void ReadCookie_StartDate() 
    { 
     //Get the cookie names 
     String strCookieStart = Request.QueryString["startDate"].ToString(); 
     String strCookieTask = Request.QueryString["task"].ToString(); 

     //Grab the cookies 
     HttpCookie cookieStart = Request.Cookies[strCookieStart]; 
     HttpCookie cookieTask = Request.Cookies[strCookieTask]; 

     //Check to make sure the cookies exist 
     if ((cookieStart != null)&&(cookieTask != null)) 
     { 
      String strCookieStartValue = cookieStart.Value.ToString(); 
      startTime.Text = strCookieStartValue; 
      String strCookieTaskValue = cookieTask.Value.ToString(); 
      Tasks.SelectedValue = strCookieTaskValue; 
     } 
    } 

    protected void ReadCookie_Timer() 
    { 
     //Get the cookie names 
     String strCookieSec = Request.QueryString["seconds"].ToString(); 
     String strCookieMin = Request.QueryString["minutes"].ToString(); 
     String strCookieHr = Request.QueryString["hours"].ToString(); 

     //Grab the cookies 
     HttpCookie cookieSec = Request.Cookies[strCookieSec]; 
     HttpCookie cookieMin = Request.Cookies[strCookieMin]; 
     HttpCookie cookieHr = Request.Cookies[strCookieHr]; 

     //Check to make sure the cookies exist 
     if ((cookieSec != null)&&(cookieMin != null)&&(cookieHr != null)) 
     { 
      String strCookieSecValue = cookieSec.Value.ToString(); 
      String strCookieMinValue = cookieMin.Value.ToString(); 
      String strCookieHrValue = cookieHr.Value.ToString(); 
      sec1.Text = strCookieSecValue; 
      min1.Text = strCookieMinValue; 
      hour1.Text = strCookieHrValue; 
     } 
    } 

    protected void ReadCookie_StopDate() 
    { 
     //Get the cookie name 
     String strCookieStop = Request.QueryString["stopDate"].ToString(); 

     //Grab the cookie 
     HttpCookie cookieStop = Request.Cookies[strCookieStop]; 

     //Check to make sure the cookie exists 
     if (cookieStop != null) 
     { 
      String strCookieStopValue = cookieStop.Value.ToString(); 
      stopTime.Text = strCookieStopValue; 
     } 
    } 

    protected void Start_Click(object sender, EventArgs e) 
    { 
     //Start the timer 
     Timer1.Enabled = true; 

     //Get the start date 
     start = DateTime.Now.ToString(); 
     if (startTime.Text == "") 
     { 
      startTime.Text = start; 
     } 

     //Store the start date in a cookie 
     Start_Session(); 

     //Enable these controls 
     Stop.Enabled = true; 

     //Disable these controls 
     Start.Enabled = false; 
     Tasks.Enabled = false; 
     Reset.Enabled = false; 
    } 

    protected void Timer1_Tick(object sender, EventArgs e) 
    { 
     //Add to the sec1 label 
     time_sec = int.Parse(sec1.Text); 
     time_sec = time_sec + 1; 
     sec1.Text = time_sec.ToString(); 

     //Hide the sec2 label 
     if (sec1.Text == "10") 
     { 
      sec2.Visible = false; 
     } 

     //Add to the min1 label 
     if (sec1.Text == "60") 
     { 
      sec2.Visible = true; 
      time_min = int.Parse(min1.Text); 
      sec1.Text = "0"; 
      time_min = time_min + 1; 
      min1.Text = time_min.ToString(); 
     } 

     //Hide the min1 label 
     if (min1.Text == "10") 
     { 
      min2.Visible = false; 
     } 

     //Add to the hour1 label 
     if (min1.Text == "60") 
     { 
      min2.Visible = true; 
      time_hour = int.Parse(hour1.Text); 
      min1.Text = "0"; 
      time_hour = time_hour + 1; 
      hour1.Text = time_hour.ToString(); 
     } 

     //Hide the hour2 label 
     if (hour1.Text == "10") 
     { 
      hour2.Visible = false; 
     } 

     //Store the sec1, min1, and hour1 values into cookies 
     TimerTick_Session(); 
    } 

    protected void Stop_Click(object sender, EventArgs e) 
    { 
     //Get the stop date 
     stop = DateTime.Now.ToString(); 
     stopTime.Text = stop; 

     //Store the stop date in a cookie 
     Stop_Session(); 

     //Disable the timer and this control 
     Timer1.Enabled = false; 
     Stop.Enabled = false; 

     //Enable these controls 
     Start.Enabled = true; 
     Reset.Enabled = true; 

     //Store the selected task, start date, stop date and totalTime 
     string tsk = Tasks.SelectedValue; 
     string dateStart = startTime.Text; 
     string dateStop = stopTime.Text; 

     //Create a sql query string 
     string sqlString = "INSERT TimeSheet (Task,DateStart,DateStop) VALUES (@Task,@DateStart,@DateStop)"; 

     //Create a sql command using the query string 
     System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand(sqlString); 

     //Add the selected task value, start date value, stop date and totalTime values to the query 
     cmd.Parameters.AddWithValue("@Task", tsk); 
     cmd.Parameters.AddWithValue("@DateStart", dateStart); 
     cmd.Parameters.AddWithValue("@DateStop", dateStop); 

     //Give the sql command a connection string 
     cmd.Connection = sqlConnection1; 

     //Execute the sql command 
     cmd.ExecuteNonQuery(); 

     //Close the sql connection 
     sqlConnection1.Close(); 
    } 

    protected void Reset_Click(object sender, EventArgs e) 
    { 
     //Clear the start and stop date labels 
     startTime.Text = ""; 
     stopTime.Text = ""; 

     //Reset these counters 
     time_sec = 0; 
     time_min = 0; 
     time_hour = 0; 

     //Reset the timer labels 
     sec1.Text = "0"; 
     min1.Text = "0"; 
     hour1.Text = "0"; 

     //Make visible these timer labels 
     sec2.Visible = true; 
     min2.Visible = true; 
     hour2.Visible = true; 

     //Disable the timer and these controls 
     Timer1.Enabled = false; 
     Reset.Enabled = false; 
     Stop.Enabled = false; 

     //Enable these controls 
     Start.Enabled = true; 
     Tasks.Enabled = true; 
    } 

    protected void Start_Session() 
    { 
     //Create a new cookie for the start date and selected task 
     //HttpCookie cookieStartDate = new HttpCookie("startDate"); 
     //HttpCookie cookieTask = new HttpCookie("task"); 

     //Set the cookie values 
     cookieStartDate.Value = start; 
     cookieTask.Value = Tasks.SelectedValue; 

     //Set the cookie to expire in about 8 hours 
     DateTime startDateExp = DateTime.Now; 
     TimeSpan startDateExpMin = new TimeSpan(0, 500, 0); 
     cookieStartDate.Expires = startDateExp + startDateExpMin; 
     DateTime taskExp = DateTime.Now; 
     TimeSpan taskExpMin = new TimeSpan(0, 500, 0); 
     cookieTask.Expires = taskExp + taskExpMin; 

     //Add the cookie 
     Response.Cookies.Add(cookieStartDate); 
     Response.Cookies.Add(cookieTask); 
    } 

    protected void TimerTick_Session() 
    { 
     //Create a new cookies for the timer 
     /*HttpCookie cookieSec = new HttpCookie("seconds"); 
     HttpCookie cookieMin = new HttpCookie("minutes"); 
     HttpCookie cookieHr = new HttpCookie("hours");*/ 

     //Set the cookie values 
     cookieSec.Value = sec1.Text; 
     cookieMin.Value = min1.Text; 
     cookieHr.Value = hour1.Text; 

     //Set the cookies to expire in about 8 hours 
     DateTime secExp = DateTime.Now; 
     TimeSpan secExpMin = new TimeSpan(0, 500, 0); 
     cookieSec.Expires = secExp + secExpMin; 
     DateTime minExp = DateTime.Now; 
     TimeSpan minExpMin = new TimeSpan(0, 500, 0); 
     cookieMin.Expires = minExp + minExpMin; 
     DateTime hrExp = DateTime.Now; 
     TimeSpan hrExpMin = new TimeSpan(0, 500, 0); 
     cookieHr.Expires = hrExp + hrExpMin; 

     //Add the cookies 
     Response.Cookies.Add(cookieSec); 
     Response.Cookies.Add(cookieMin); 
     Response.Cookies.Add(cookieHr); 
    } 

    protected void Stop_Session() 
    { 
     //Create a new cookie for the stop date 
     //HttpCookie cookieStopDate = new HttpCookie("stopDate"); 

     //Set the cookie value 
     cookieStopDate.Value = stop; 

     //Set the cookie to expire in about 8 hours 
     DateTime stopDateExp = DateTime.Now; 
     TimeSpan stopDateExpMin = new TimeSpan(0, 500, 0); 
     cookieStopDate.Expires = stopDateExp + stopDateExpMin; 

     //Add the cookie 
     Response.Cookies.Add(cookieStopDate); 
     } 
    } 
} 

सत्र स्थिति को बचाने के लिए इस कोड को प्राप्त करने में किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद।

+1

क्लाइंट पक्ष पर एक कुकी संशोधित की जा सकती है। आपके मामले में, एक कर्मचारी स्टॉपवॉच को जो भी समय देता है उसे संशोधित करने में सक्षम होगा। – Blachshma

+0

इसके अलावा, क्यों सिर्फ एक GUID जो क्लाइंट पक्ष पर एक कुकी के रूप में सत्र id किसी तरह का है नहीं बचा। वास्तविक डेटा, उदा। जब टाइमर शुरू किया जाएगा सर्वर पर संग्रहीत किया जाएगा और इस सत्र आईडी के माध्यम से संदर्भित किया जाएगा? – Blachshma

+0

मैं पता लगा इसे कैसे करना है, लेकिन मैं अगर मैं पर्याप्त समय सीमा से पहले छोड़ दिया है और साथ ही अपने विधि का प्रयास करना चाहते हैं। – user1910256

उत्तर

0

मैं डाटाबेस हैंडलिंग पर भी जल्दी से टिप्पणी करना चाहता हूं, क्योंकि आप अपनी प्रस्तुति परत से डाटा लेयर को सारणीबद्ध करना चाहते हैं, दूसरे शब्दों में, डेटा हैंडलिंग के लिए एक अलग प्रोजेक्ट या क्लास बनाने पर विचार करें, एक ही जगह।

इसके अलावा, आप पहले से ही पता लगा सकते हैं लेकिन पोस्ट बैक के बीच राज्य स्थिति को संरक्षित करें, क्योंकि यह पृष्ठ पर सत्र जानकारी संग्रहीत करता है, लेकिन पुनः लोड होने के मामले में अब कोई दृश्य स्थिति नहीं है।

इसके अलावा, मेरी माफी मैं इसे जल्दी से पढ़ा है, लेकिन यह आप माइक्रोसॉफ्ट सत्र से निपटने के पुनर्लेखन के लिए, asp.net सत्र से निपटने के लिए देखने के लिए कोशिश कर रहे हैं लगता है।

वे मेरे 2 सेंट हैं।