2016-08-17 18 views
-2

我有一個方法在控制器POST開始郵政() 當我提交按鈕上的窗體單擊Startmailing()方法開始執行並且該方法中的計數增加。ajax調用控制器方法formsubmit和getdata後

public void Startmailing() 
     { 
      for (int i = 0; i < 100; i++) 
      { 
       _count++; 

      } 

     } 

我想要做的是形式提交後我想調用另一個方法getCount將()的控制器,返回計數

[HttpPost] 
     public ActionResult GetCount() 
     { 
      return Json(new { Data = _count }); 
     } 

但我面臨的問題,只執行getCount將的 ()方法一次又一次而且只返回0 ..我怎樣才能執行這兩種方法並獲得增加計數

我試圖在之後調用此方法 發送

function submitform() { 

var f = document.getElementsByTagName('form')[0]; 

    f.submit(); 
    showCount(); 
    function showCount() { 
     $.ajax({ 
      url: '@Url.Action("GetCount", "Test")', 
      type: "POST", 
      success: function (a) { 
       alert(a.Data); 
      } 
     }); 
     setTimeout(showCount(), 1000); 
    } 

在此先感謝!

任何幫助將不勝感激.. 編輯問題,如果需要的話..

+0

你指定的setTimeout(showCount(),1000);因爲它一次又一次地觸發 –

+0

是的,我想調用,每隔一秒後,只有我會得到增加計數但也希望Startmailing()方法執行,否則我將只得到0 ..首先明白我的問題 –

+0

你可以請提交代碼的提交表格即按鈕點擊 –

回答

0

在發佈數據的SetTimer這讓每一個5秒後從getCount將法算...我使用了Thread.Sleep只是爲了保持時刻... ...在你的情況下,這是不需要的郵件發送自身需要時間......

在控制器

public static long Count; 

    [HttpPost] 
    public JsonResult GetCount() 
    { 
     return Json(Count); 
    } 

    [HttpPost] 
    public void Index(FormCollection data) 
    { 
     Count = 0; 
     for (int i = 0; i < 10000; i++) 
     { 
      Thread.Sleep(1000); 
      Count++; 
     } 
    } 

使用這個腳本

<script> 
    function btnSubmit() { 
     window.setInterval(starttimer, 5000); 

     var f = document.getElementsByTagName('form'); 
     f.submit(); 
    } 

    function starttimer() { 
     $.ajax({ 
      type: 'POST', 
      url: "/SendMail/GetCount", 
      dataType: 'json', 
      asyn: false, 
      timeout:5000, 
      success: function (data) { 
       $("#Count").val(data); 
      } 
     }); 
    } 

</script> 
+0

yes這是工作... –

0

必須調用Startmailing第一becouse _count有默認值0

[HttpPost] 
    public ActionResult GetCount() 
    { 
     Startmailing() 
     return Json(new { Data = _count }); 
    } 
+0

表單提交startmailing將首先調用getcount @using(Html.BeginForm(「Startmailing」,「Test」,FormMethod.Post,new {enctype =「multipart/form-data」})) –

+0

當您調用GetCount時,你用他的默認值和_count = 0或構造函數中的值創建新的控制器obj,所以它將返回0 –

+0

那麼什麼是解決方案? –

0

首先發送表單數據串行在Ajax調用並在成功呼叫您的功能:

$.ajax({ 
url: '@Url.Action("Sta‌​rtmailing", "Test")', 
dataType: 'json', 
data: $("#form").serialize(), 
type: 'POST', 
success: function (result) { 
    showCount(); 
}, 
error: function (xhr) { 
} 
}); 
0

對於我在Startmailing()可以節省(循環後)數到會話:

public void Startmailing() 
    { 
     for (int i = 0; i < 100; i++) 
     { 
      _count++; 

     } 
     Session["Count"] = _count; 
    } 

而且在方法讀取這個變量:

[HttpPost] 
    public ActionResult GetCount() 
    { 
     return Json(new { Data = Session["Count"]}); 
    } 
+0

f。提交(); showCount();在這種情況下,一旦showcount方法開始執行startmail()方法未執行 –

+0

嘗試更改Startmailing()並添加:Session [「Count」] = _count ++到您的循環中 – Perdido