我在控制器中有一个方法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);
}
提前致谢!
任何帮助都会受到赞赏.. 如果需要,请编辑问题..
答案 0 :(得分:0)
你必须先调用Startmailing
因为_count有默认值0
[HttpPost]
public ActionResult GetCount()
{
Startmailing()
return Json(new { Data = _count });
}
答案 1 :(得分:0)
首先在ajax调用中发送表单序列化数据,并在成功时调用您的函数:
$.ajax({
url: '@Url.Action("Startmailing", "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>