ajax在formsubmit和getdata之后调用controller方法

时间:2016-08-17 11:59:40

标签: jquery ajax asp.net-mvc

我在控制器中有一个方法POST Startmailing() 当我在Button上提交表单时单击Startmailing()方法开始执行并且该方法中的Count增加。

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

            } 

        } 

我想做的是After Form Submit我想调用该控制器的另一个方法 GetCount()返回Count

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

但是我面临的问题只会一次又一次地执行 Getcount()方法并且只返回0 ..如何执行两种方法并获得增加的计数

我试图在formsubmit()之后调用此方法        发送

  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);
    }

提前致谢!

任何帮助都会受到赞赏..  如果需要,请编辑问题..

4 个答案:

答案 0 :(得分:0)

你必须先调用Startmailing因为_count有默认值0

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

答案 1 :(得分:0)

首先在ajax调用中发送表单序列化数据,并在成功时调用您的函数:

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

答案 2 :(得分: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"]});
    } 

答案 3 :(得分:0)

发布数据settimer,每隔5s后从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>