Click here to Skip to main content
15,885,546 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Dear All,

I got confused with this issue since last two three days.
What I need is to call a Javascript one time only at the time of the page load.
My application is an Online Test with limited time period. When the user starts to take up the test, the time should start. Its working fine.
But the problem is when they will click the next button go to next question, the time is resetting and loading from first.
Here my aspx code:


 <script language="javascript" type="text/javascript">
        var mins
        var secs;
        function cd() {
            var tmin = document.getElementById("txtMin").value;
            mins = tmin * m("1");
            secs = 0 + s(":01");
            redo();
        }

        function m(obj) {
            for (var i = 0; i < obj.length; i++) {
                if (obj.substring(i, i + 1) == ":")
                    break;
            }
            return (obj.substring(0, i));
        }

        function s(obj) {
            for (var i = 0; i < obj.length; i++) {
                if (obj.substring(i, i + 1) == ":")
                    break;
            }
            return (obj.substring(i + 1, obj.length));
        }

        function dis(mins, secs) {
            var disp;
            if (mins <= 9) {
                disp = " 0";
            } else {
                disp = " ";
            }
            disp += mins + ":";
            if (secs <= 9) {
                disp += "0" + secs;
            } else {
                disp += secs;
            }
            return (disp);
        }

        function redo() {
            secs--;
            if (secs == -1) {
                secs = 59;
                mins--;
            }
            document.cd.disp.value = dis(mins, secs);
            if ((mins == 0) && (secs == 0)) {
                window.alert("Time is up. Press OK to continue.");
            } else {
                cd = setTimeout("redo()", 1000);
            }
        }

        function init() {
            cd();
        }
        
      
    </script>

<pre lang="xml"><asp:UpdatePanel runat="server" ID="TimePanel">
                                        <Triggers>
                                        </Triggers>
                                        <ContentTemplate>
                                            <input id="txt" readonly="true" type="text" value="10:00" border="0" name="disp" /><asp:TextBox
                                                ID="txtMin" Text="25" runat="server">
                                            </asp:TextBox>
                                        </ContentTemplate>
                                    </asp:UpdatePanel>



XML
<div id="lblQuestion" style="font-weight: bold; height: 21px; width: 659px;" runat="server">
</div>
<asp:RadioButton ID="rbtnA" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnB" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnC" runat="server" GroupName="an" CssClass="radioButt" />
<asp:RadioButton ID="rbtnD" runat="server" GroupName="an" CssClass="radioButt" />
<asp:Button ID="btnNext" runat="server" Width="100px" Text="Next" OnClick="btnNext_Click" />
<asp:Button ID="btnFnish" runat="server" Width="100px" Text="Finsh" OnClick="btnFnish_Click"
Height="26px" />







using System;
using System.IO;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data.SqlClient;
using DataLayer.DAL;
using Internal.BOL;
using log4net;
using System.Text;

public partial class displayQuestion : System.Web.UI.Page
{
    SessionOnline ObjOnline;
    int  qNo = 0;
    int qtype;
    string correctTestAnswer = "";
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            
            //if (IsPostBack)
            //{
            //    clientSideIsPostBack.Text = "Y";
            //}
            ObjOnline = Common.GetOrCreateSessionObject();
            if (ObjOnline.UserId != 0)
            {
                if (ObjOnline.RoleId ==3)
                {
                    if (!IsPostBack)
                    {
                        Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "init()", true);
                        clientSideIsPostBack.Text = "Y";
                        lblUserName.Text = ObjOnline.UserName;
                        LoadDetails();
                        BindDetails();
                        //minute = Convert.ToInt32(txtTestDuration.Text) - 1;
                        txtMin.Text = txtTestDuration.Text;
                        btnNext.Visible = true;

                    }
                    else
                    {
                        clientSideIsPostBack.Text = "N";
                    }
                }
                else
                {
                    Response.Redirect("login.aspx");
                }
            }
            else
            {
                Response.Redirect("login.aspx");
            }
        }
        catch
        { }

    }
    public void LoadDetails()
    {
        try
        {
            DataSet ds = new DataSet();
            selectcommand da = new selectcommand();
            ds = da.getTestDetails(2, ObjOnline.UserId);
            lblExamCategory.Text = ds.Tables[0].Rows[0][1].ToString();
            txtTestDuration.Text = ds.Tables[0].Rows[0][8].ToString();           
        }
        catch
        { }
    }

    protected void btnFnish_Click(object sender, EventArgs e)
    {
        fnishExam();
    }
    public void fnishExam()
    {
        try
        {
            if (lblQuestionType.Text == "Objective")
            {
                objectiveAnswer();
            }
            else
            {
                sequenceAnswer();
            }
            NextPage();
        }
        catch
        { }
        Response.Redirect("ThankYou.aspx");
    }
    private int CurrentPage
    {
        get
        {
            object objPage = ViewState["_CurrentPage"];
            int _CurrentPage = 0;
            if (objPage == null)
            {
                _CurrentPage = 0;
            }
            else
            {
                _CurrentPage = (int)objPage;
            }
            return _CurrentPage;
        }
        set { ViewState["_CurrentPage"] = value; }
    }
    public void BindDetails()
    {
       
        try
        {           
            DataSet ds = new DataSet();
            ds.ReadXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "questionAnswer.xml"));
            int Totalcount = Convert.ToInt32(ds.Tables[0].Rows.Count);
            ViewState["TotalPages"] = Totalcount;
            int count = Convert.ToInt32(Totalcount - 1);
            if (count - 1 < CurrentPage)
            {
                btnNext.Visible = false;
            }
            DataTable dt = ds.Tables[0];
            DataView dv = new DataView();
            dv = dt.DefaultView;
            dv.RowFilter = "No =" + CurrentPage;
            DataTable dt1 = dv.ToTable();
            DataSet ds1 = new DataSet();
            ds1.Tables.Add(dt1);
            lblQuestionType.Text = ds1.Tables[0].Rows[0][2].ToString();
            qtype =Convert.ToInt32(ds1.Tables[0].Rows[0][0].ToString());
            if (lblQuestionType.Text == "Objective")
            {
                objectiveType();
            }
            else
            {
                txtUserAnswer.Visible = false;
                lblSketch.Visible = true;
                linkPrint.Visible = true;
                sequenceType();
            }
            //else
            //{
            //    
            //}
            int QNo = 1 + Convert.ToInt32(ds1.Tables[0].Rows[0][9].ToString());
            lblQNo.Text = Convert.ToString(QNo);
            if (qtype == 8)
            {
                imgChoice1.Visible = true;
                imgChoice2.Visible = true;
                imgChoice3.Visible = true;
            }
            else
            {
                imgChoice1.Visible = false;
                imgChoice2.Visible = false;
                imgChoice3.Visible = false;
                
            }
            lblQuestion.InnerHtml = ds1.Tables[0].Rows[0][3].ToString();
            Session["printName"] = ObjOnline.UserName;
            Session["printID"] = ObjOnline.UserId;
            Session["printQuestion"] = lblQuestion.InnerHtml;
            rbtnA.Text = ds1.Tables[0].Rows[0][4].ToString();
            rbtnB.Text = ds1.Tables[0].Rows[0][5].ToString();
            if (ds1.Tables[0].Rows[0][6].ToString() != "")
            {
                rbtnC.Text = ds1.Tables[0].Rows[0][6].ToString();
            }
            else
            {
                trChoiceC.Visible = false;
            }
            if (ds1.Tables[0].Rows[0][7].ToString() != "")
            {
                rbtnD.Text = ds1.Tables[0].Rows[0][7].ToString();
            }
            else
            {
                trChoiceD.Visible = false;
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "A")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][4].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "B")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][5].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "C")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][6].ToString();
            }
            if (ds1.Tables[0].Rows[0][8].ToString() == "D")
            {
                correctTestAnswer = ds1.Tables[0].Rows[0][7].ToString();
            }
            else
            {
                lblCorrectAnswer.Text = ds1.Tables[0].Rows[0][8].ToString();
            }
            lblCorrectAnswer.Text = correctTestAnswer.ToString();
            lblQuestLeft.Text = Convert.ToString(Totalcount - QNo);
        }
        catch
        {
        }

    }
    private void NextPage()
    {
        try
        {
          
            if (Convert.ToInt32(ViewState["TotalPages"]) == 1)
            {
                this.BindDetails();
                CurrentPage = qNo;
            }
            else
            {
                if (CurrentPage == Convert.ToInt32(ViewState["TotalPages"]) - 1)
                {
                    CurrentPage = 0;
                }
                else
                    CurrentPage += 1;
            }
            this.BindDetails();
            clear();
        }
        catch
        {
        }
    }

    protected void btnNext_Click(object sender, EventArgs e)
    {
        
        try
        {
            this.Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "script", "<script>stopTimer();</script>");
            if (lblQuestionType.Text == "Objective")
            {
                objectiveAnswer();
            }
            else
            {
                sequenceAnswer();
            }
            NextPage();
        }
        catch
        { }
       
    }
    public void sequenceAnswer()
    {
        try
        {
            
            AddDataToTable(txtUserAnswer.Text.ToUpper());
            
        }
        catch
        { }
    }
    public void objectiveAnswer()
    {
        try
        {
            if (rbtnA.Checked == true)
            {
                AddDataToTable(rbtnA.Text);
            }
            else if (rbtnB.Checked == true)
            {
                AddDataToTable(rbtnB.Text);
            }
            else if (rbtnC.Checked == true)
            {
                AddDataToTable(rbtnC.Text);
            }
            else if (rbtnD.Checked == true)
            {
                AddDataToTable(rbtnD.Text);
            }
            else
            {
                AddDataToTable("");
            }
        }
        catch
        { }
    }
    private void AddDataToTable(string Answer)
    {
        try
        {
            DataSet ds = new DataSet();

            if (lblQNo.Text != "1")
            {
                ds.ReadXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "Answer.xml"));
            }
            DataTable myDataTable = new DataTable();

            DataColumn myDataColumn;
            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "id";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "QuestionType";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Question";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "UserAnswer";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Answer";
            myDataTable.Columns.Add(myDataColumn);

            myDataColumn = new DataColumn();
            myDataColumn.DataType = Type.GetType("System.String");
            myDataColumn.ColumnName = "Mark";
            myDataTable.Columns.Add(myDataColumn);

            ds.Tables.Add(myDataTable);
            DataRow row = ds.Tables[0].NewRow();
            row["ID"] = lblQNo.Text;
            if (lblQuestionType.Text == "Objective")
            {
                row["QuestionType"] = "1";
            }
            else if (lblQuestionType.Text == "Sequence")
            {
                row["QuestionType"] = "2";
            }
            else
            {
                row["QuestionType"] = "3";
            }
            row["Question"] = lblQuestion.InnerHtml;
            row["UserAnswer"] = Answer;
            row["Answer"] = lblCorrectAnswer.Text;

            if (lblCorrectAnswer.Text.ToUpper() == Answer.ToUpper())
            {
                row["Mark"] = "0.5";
            }
            else
            {
                row["Mark"] = "0";
            }
            ds.Tables[0].Rows.InsertAt(row, 0);

            ds.WriteXml(string.Format(HttpContext.Current.Server.MapPath("~/xmlMenu") + "/" + ObjOnline.UserId + "answer.xml"), XmlWriteMode.WriteSchema);
            clear();
        }
        catch
        { }
    }


    public void clear()
    {
        try
        {
            rbtnA.Checked = false;
            rbtnB.Checked = false;
            rbtnC.Checked = false;
            rbtnD.Checked = false;
            txtUserAnswer.Text = "";
        }
        catch
        { }
    }
    public void sequenceType()
    {
        try
        {
            trChoiceA.Visible = false;
            trChoiceB.Visible = false;
            trChoiceC.Visible = false;
            trChoiceD.Visible = false;
            trUserAnswer.Visible = true;
        }
        catch
        { }
    }
    public void objectiveType()
    {
        try
        {
            trChoiceA.Visible = true;
            trChoiceB.Visible = true;
            trChoiceC.Visible = true;
            trChoiceD.Visible = true;
            trUserAnswer.Visible = false;
        }
        catch
        { }
    }

}


What I need is: I want to call that init(); function only at the first time of page load, not at every post back.

Its very urgent. Please solve my problem.
My mail id is [Email removed]

Thanks.
Posted
Updated 11-Oct-10 21:56pm
v4

You can call your Javascript method from server side. Based on a given condition (Fresh page load in your case), execute that JS method.

Thus, at next button clicks(which looks like to be async postback's) or any submit button click(which would be full postback) - don't execute the JS method.

Well, try something like:
C#
Page.ClientScript.RegisterStartupScript(Type.GetType("System.String"), "addScript", "DisplayDateTime()", true);


P.S.: The RegisterClientScriptBlock method adds a script block to the top of the rendered page. While, the script block added by the RegisterStartupScript method executes when the page finishes loading but before the page's OnLoad event is raised.
(it means the RegisterStartupScript method adds a script block to the end of the rendered page.)
 
Share this answer
 
Use cookies to preserve the last state
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900