Online quiz

7 posts, 0 answers
  1. Abdulaziz
    Abdulaziz  avatar
    1 posts
    Member since:
    Dec 2014

    Posted 13 Jan 2015 Link to this post

    Im new to Telerik. Please help me in this regard.
    We are doing online competitive Exam template. 





    Total Number of Question : based on the exam (Random Questions)


    Question Type : Optional, Multiple Choice, Match the following, Reordering, Fill in the blanks


    Exam Duration : Based on the exam.

    Please suggest us which telerik control is suitable for quiz, Match the following, Reordering.



  2. Marin Bratanov
    Admin
    Marin Bratanov avatar
    3602 posts

    Posted 14 Jan 2015 Link to this post

    Hello,

    I have answered your support ticket on the same matter and I am adding here my reply for anyone else with a similar question.


    We do not have a control that can be used directly for creating quizes, yet what I can suggest is the below basic proof of concept that uses RadWizard. To get a better view of the control features, I advise that you examine the following demos as well:

    <telerik:RadWizard runat="server" ID="RadWizard1" RenderedSteps="Active" OnNextButtonClick="RadWizard1_NextButtonClick">
           <WizardSteps>
                  <telerik:RadWizardStep StepType="Start">
                         initial step. Begin quiz
                         <asp:TextBox ID="Textbox1" runat="server" />
                  </telerik:RadWizardStep>
           </WizardSteps>
    </telerik:RadWizard>

    Protected Sub RadWizard1_NextButtonClick(sender As Object, e As WizardEventArgs)
        'here is how to access and use data from the wizard steps. You can add user controls in them for each type
        'of question and fire events in them in order to store the data, to avoid many FindControl() calls
        Dim tb As TextBox = TryCast(e.CurrentStep.FindControl("Textbox1"), TextBox)
        If tb IsNot Nothing Then
            Response.Write(tb.Text)
        End If
     
        'see what step type you need, evaluate the current step through e.CurrentStep so you know what to add next
        Dim currStep As New RadWizardStep()
        'make sure to add unique IDs to each step to avoid errors. In this sample, clicking Next the second time will cause
        'an error because there are no checks for the actual next step that is supposed to be added
        currStep.ID = "desiredID"
        currStep.Title = "the title"
        currStep.StepType = RadWizardStepType.[Step]
        'this determines what buttons are available
        currStep.Controls.Add(New LiteralControl("test"))
        'create the needed controls for your question here
        RadWizard1.WizardSteps.Add(currStep)
     
        RadWizard1.ActiveStepIndex = RadWizard1.WizardSteps(RadWizard1.WizardSteps.Count - 1).Index
    End Sub

    You can also look into using RadDataForm ( http://demos.telerik.com/aspnet-ajax/dataform/overview/defaultcs.aspx ) for creating each question of a certain type with it, if your data source and user experience match what the control needs and offers: http://demos.telerik.com/aspnet-ajax/dataform/functionality/layouts/defaultcs.aspx

    Regards,

    Marin Bratanov
    Telerik
  3. UI for ASP.NET Ajax is Ready for VS 2017
  4. binny
    binny avatar
    21 posts
    Member since:
    Jan 2015

    Posted 27 Jan 2015 Link to this post

    I am trying to create a prototype for online quiz but stuck , can someone help?
    My requirement is to create a quiz which will
    1) Add the questions / answers dynamically as steps
    2) validate the answers and if it is wrong answer add the question back again in the step so that they can retry

    And also

    I did achieve most of it except that my data and steps are getting mixed, I am sure there is a better way to do it , please help

    And also why RadWizard1_WizardStepCreated called everytime there is a change in step

      protected void RadButton1_Click(object sender, EventArgs e)
            {
                //if (RadNumericTextBox1.Value > 0)
                //{
                RadButton button = (RadButton)sender;
                button.Enabled = false;
                List<data> data = new List<data>();
                data = (List<data>)HttpContext.Current.Session["data"];
                for (int i = 0; i < data.Count; i++)
                {
                    RadWizardStep step = new RadWizardStep();
                    step.ID = "Question"+(i + 1).ToString();                              
                    RadWizard1.WizardSteps.Add(step);
                }
                RadWizardStep completeStep = new RadWizardStep();
                completeStep.ID = "Complete";
                RadWizard1.WizardSteps.Add(completeStep);
                RadWizard1.ActiveStepIndex = RadWizard1.WizardSteps[1].Index;
                //}
            }
      protected void RadWizard1_WizardStepCreated(object sender, Telerik.Web.UI.WizardStepCreatedEventArgs e)
            {
                if (e.RadWizardStep.ID == "Complete")
                {
                   //complete logic
                }
                else
                {
                    List<Data> data = new List<Data>();
                    data = (List<Data>)HttpContext.Current.Session["data"];
                    Label label = new Label();
                    RadioButtonList list = new RadioButtonList();
                    list.AutoPostBack = true;
                    list.CausesValidation = true;
                    list.SelectedIndexChanged += new EventHandler(list_SelectedIndexChanged);
                  
                    label.Text = data[e.RadWizardStep.Index - 1].Question;                     
                    list.Items.Add(data[e.RadWizardStep.Index - 1].A);
                    list.Items.Add(data[e.RadWizardStep.Index - 1].B);
                    list.Items.Add(data[e.RadWizardStep.Index - 1].C);
                  
                    e.RadWizardStep.Controls.Add(label);
                    e.RadWizardStep.Controls.Add(new Literal() { Text = "<br />" });
                    e.RadWizardStep.Controls.Add(list);
                    }
                      
                    }          
               
            }
      private void list_SelectedIndexChanged(object sender, EventArgs e)
            {
                RadioButtonList RBL = (RadioButtonList)sender;
                List<data> data = new List<data>();
                data wrongAnswer = new data();
                data = (List<data>)HttpContext.Current.Session["data"];
                string s = RBL.SelectedValue.ToString();
                string y =  data[RadWizard1.ActiveStepIndex-1].Answer;
                if(s.Trim() == y.Trim())
                {
                   some logic
                }
                else
                {
                    some logic  


    List<data> ldata= new List<data>();
    data.Add(listQuizData[RadWizard1.ActiveStepIndex - 1]);
    HttpContext.Current.Session["data"] = ldata; 
             
    RadWizardStep step = new RadWizardStep();
    step.ID = " Repeat Question";
    RadWizard1.WizardSteps.Add(step);
                }
              
              
             
            }
  5. Boyan Dimitrov
    Admin
    Boyan Dimitrov avatar
    1746 posts

    Posted 01 Feb 2015 Link to this post

    Hello,

    I would like to say that your idea and implementation seems absolutely correct. A possible reason for mixing questions(data) and steps might be the following code:
    //code behind
    label.Text = data[e.RadWizardStep.Index - 1].Question;                    
    list.Items.Add(data[e.RadWizardStep.Index - 1].A);
     list.Items.Add(data[e.RadWizardStep.Index - 1].B);
    list.Items.Add(data[e.RadWizardStep.Index - 1].C);

    Perhaps you can access the same index in the "data" collection as the step index ( not to subtract "1" from the e.WizardStep.Index). I believe such logic might lead to unexpected behavior.

    As for second question - the WizardStepCreated event is fired whe a step is changed in order to persist  the controls within the steps. All dynamically created steps should be recreated on the server each time.



    Regards,
    Boyan Dimitrov
    Telerik
  6. binny
    binny avatar
    21 posts
    Member since:
    Jan 2015

    Posted 09 Feb 2015 in reply to Boyan Dimitrov Link to this post

    But my list data starts from index "0" and e.RadWizardStep.Index starts from "1"

    I will be getting index out of range exception because my data count would be 0,1,2 and the e.RadWizardStep.Index would be 1,2,3

    That is the reason I had to do [e.RadWizardStep.Index-1]
  7. Boyan Dimitrov
    Admin
    Boyan Dimitrov avatar
    1746 posts

    Posted 13 Feb 2015 Link to this post

    Hello,

    An easy workaround would be creating the array that holds the questions with one more element compared to the number of dynamically created steps. After all you have a start step that does not contain any questions and its index is 0.
    //code
    List<String> data = new List<string>();
    for (int i = 0; i < RadNumericTextBox1.Value + 1; i++)
                    {
                        data.Add("text for ste index" + i);
                    }


    I prepared a sample project that creates dynamically an array that holds string values to be printed in a text box within each step.  The example shows how to show/print the text that corresponds to the current step and avoid any mixing.


    Regards,
    Boyan Dimitrov
    Telerik
  8. binny
    binny avatar
    21 posts
    Member since:
    Jan 2015

    Posted 06 May in reply to Boyan Dimitrov Link to this post

    Hello Boyan - I am really sorry that I am posting after a long gap but this project got delayed and I never got this working.

    I am not able to use the demo you put in your previous post for this case.

    Now I have a similar requirement but not able to get it working.Any direction on this would be greatly appreciated

     

     

Back to Top
UI for ASP.NET Ajax is Ready for VS 2017