2016-12-12 16 views
0

は私の新しいタイマーれる:は、JavaScriptのタイマーでコントローラからアクションを呼び出す方法をここで

  var eventDate = new Date(Date.parse(new Date) + 3600); 

      function countdown() { 

       var elapsed = Date.parse(eventDate) - Date.parse(new Date()); 

       var seconds = Math.floor((elapsed/1000) % 60); 
       var minutes = Math.floor((elapsed/1000/60) % 60); 

       minutes = (minutes < 10) ? "0" + minutes : minutes; 
       seconds = (seconds < 10) ? "0" + seconds : seconds; 

       return { 
        'minutes': minutes, 
        'seconds': seconds, 
        'total': elapsed 
       } 
      } 

      function initializeClock() { 
       var minutes = document.getElementById('minutes'); 
       var seconds = document.getElementById('seconds'); 

       var timeInterval = setInterval(function() { 
         minutes.innerHTML = countdown().minutes; 
         seconds.innerHTML = countdown().seconds; 

         if(minutes.equals(0) && seconds.equals(0)) 
         { 
          timeInterval().stop(); 

          $.ajax({ 
            url: "Finish/Test", 
            type: 'POST', 
            success: function (result) { 
            if (result.success) { 
            $('#htmlElement').html(result.htmlElement); 
            } 
           } 
          }); 
         } 
        },1000); 
      } 

      initializeClock(); 

    <h2>@ViewBag.Title</h2> 
     <div id ='hmtlElement'> 

....というようにHTMLでは

 [HttpPost] 
      public ActionResult Finish(ExamineTest examineTest) 
      { 
       var question = examineTest.Question.ToList(); 

       _questions.AddRange(question); 
       _testService.SaveSolvedTest(examineTest); 

       return Json(new { success = true, htmlElement = RedirectToAction("Preview", "Test") }); 

      } 




    [HttpGet] 
     public ActionResult Preview() 
     { 
      SolvedTest solvedTest = _testService.GetSolvedTest(); 

      SolvedTestModel solvedTestModel = EntitySolvedTestConverter.ToModel(solvedTest); 
      return View("Finish", solvedTestModel); 
     } 
+0

なぜajaxとjsonを使用しないのですか? – Bharat

+0

「完了」ビューは現在表示されている全体のビューを置き換えますか?またはページ上の一部だけを変更する必要がありますか?これにより、htmlElementをどこにロードするかが決まります。 – Jared

+0

@ Jared全体のビューが置き換えられます。 – Karolina

答えて

0

あなたは、AJAXとJSONを使用してこれを行うことができます@バラットのように。次に、コントローラを呼び出すことができるajaxメソッドのコードスニペットを示します。

function countdown(){ 
// checking your minute second logic 
if(minute second equals 0) 
    //var firstName = textbox where name is stored 
    //var list = listbox where list is stored. 
    var url = "Test/Finish?" + firstName + "&" + list; 
    // url looks like Test/Finish?John&ListofElements 
    $.ajax({ 
      url: url, 
      type: 'POST', 
      success: function (result) { 
       if(result.success){ 
        $('#htmlElement').html(result.htmlElement); 
       } 
      } 
     }); 

} 

上記のいくつかのMVCルートをURLとして使用できます。

コントローラーはこのように見えます。

[HttpPost] 
public ActionResult Finish(ExamineTest examineTest) 
{ 
    var question = examineTest.Question.ToList(); 
    _questions.AddRange(question); 
    _testService.SaveSolvedTest(examineTest); 

    SolvedTest solvedTest = _testService.GetSolvedTest(); 
    SolvedTestModel solvedTestModel = EntitySolvedTestConverter.ToModel(solvedTest); 

    return Json(new { success = true, htmlElement = View("Finish", solvedTestModel)}); 
} 

あなたのロジックのため。分と秒が0に等しいときにこれを呼び出すだけです。

+0

コメントは議論の延長ではありません。この会話は[チャットに移動]されています(http://chat.stackoverflow.com/rooms/130512/discussion-on-answer-by-jared-how-to-call-action-from-controller-in-javascript- t)。 –

関連する問題