2012-04-13 50 views
0

我使用asp.net C#MVC3与剃刀模板,并想知道以下内容:如何根据for循环提交表单多次?

我有一个窗体,此窗体包含一个按钮。如果我按一下按钮下面的代码会被执行:

function OnGetSelectedFieldValues(result) { 
    for (var i = 0; i < result.length; i++) { 
     $("#id").val(result[i]); //This will replace the value of my hidden field with the selected id 
     $("#DeleteForm").submit(); 
    } 
} 

按照我的逻辑本应提交和删除,我已经从我的GridView中选择每一行。 它确实选择了每条记录,这是我用Javascript“alert()”测试过的。 但它只会删除第一条记录,为什么会发生这种情况,我该如何解决这个问题?

问候,

马尔科

编辑: 这是我的形式(更容易理解):

@using (Html.BeginForm("Delete", "Home", FormMethod.Post, new { id = "DeleteForm" })) 
    { 
     <input type="hidden" id="id" name="id" /> 
     <input type="button" id="button" value="Verwijder geselecteerde" /> 
    } 

我的控制器:

[HttpPost] 
    public ActionResult Delete(int id) 
    { 
     ErrorRepository repo = new ErrorRepository(); 
     var test = repo.GetById(id); 
     repo.Delete(test); 
     return RedirectToAction("Index"); 
    } 
+2

你应该只提交所有值的同时,处理在遍历他们你的C#代码。不要做多个POST请求。 – Yuck 2012-04-13 13:32:56

+0

一般来说,这看起来很糟糕。您应该尝试对所有删除操作提出一个请求以节省流量和延迟。这也可能会导致您的网络服务器配置出现问题,例如,如果您安装了某种反洪泛安全过滤器(或甚至在生产中稍后) – worenga 2012-04-13 13:35:45

回答

2

因为您在表单上直接进行POST,所以它只会在循环中执行第一次,因为表单在到达下一个循环时已经发布。

这不是正确的方式来处理多个删除,但如果你必须这样做,你需要创建一个AJAX post方法,以便多个删除可以异步发生。

更好的方法是将ID的完整列表删除到表单POST,然后在服务器端一次全部删除它们。你应该建立一个逗号分隔的ID字符串并发送到POST方法。然后在方法使用

var _ids = values.split(','); 
    foreach(var _id in _ids){ 
     YourDeleteMethod(Int32.Parse(_id)); 
    } 

如果你必须通过多个职位去做,你会希望是这样的:

function OnGetSelectedFieldValues(result) { 
    for (var i = 0; i < result.length; i++) { 
     $.post("yourPostURL", result[i]); 
    } 
} 
+0

我不确定我是否会收到你,我对asp.net C#相当陌生。我在我的控制器中有一个带有公共ActionResult Delete(int id)的HttpPost,我将该ID传递给控制器​​,我怎样才能一次添加多个id。 – MrSlippyFist 2012-04-13 14:00:35

+0

编辑您的删除方法接受一个字符串代替,因此: '删除(字符串ID)' 然后通过传递进来,并将其转换回一个整数每个删除操作的每个ID循环: '变种_ids = id.Split(','); foreach(var_id in _ids){ YourDeleteMethod(Int32.Parse(_id)); }' – 2012-04-13 14:11:40

+0

谢谢,我现在明白了。超级简单,现在我看看它。 – MrSlippyFist 2012-04-13 14:39:47

0

只能提交1每页一次的形式,尽量实现一种删除多个的方式记录一个请求!

+0

您是否对如何执行此操作有任何建议?我对asp.net C#相当陌生。 – MrSlippyFist 2012-04-13 13:38:37