在 XHTML 中,表单中的表单是不允许的,而且它没有真正的意义。
为了完成您想要做的事情,您应该在表格中使用简单的链接/按钮。例如,它们可以向您的服务器发送“删除”请求,并且在成功完成请求后,还可以使用 jQuery 从 UI 中删除条目。
Example:
[Authorize]
[HttpPost]
public JsonResult Delete(Guid id)
{
// do stuff, delete the item
return Json(succeeded ? Id.ToString() : "error");
}
在视图中
<a href="#" onclick="$.post('/Stuff/Delete/' + id, function(data) { deleteCallback(data); }); return false;">delete</a>
function deleteCallback(data)
{
if(data=="error"){
/* error handler for UI */
}
else {
/*remove the entry from the user interface*/
}
};
如果你想进行多重删除,你不应该使用URL传输要删除的ID列表(因为IE中有2k的限制,看起来很糟糕),而是使用以下语法:
arrayVariable = new Array();
// fill array with ids associated to checked checkboxes' entries
$.post('/Stuff/Delete/' + id, {'IdsToDelete' : arrayVariable }, function(data) { deleteCallback(data); }); return false;">
这可以自动序列化为真实的 .NET 列表,因此您只需迭代整数或 GUID 列表,或者无论您的 PK 是什么样子!
编辑:这仍然有点简化。出于安全原因,您应该保护自己免受 CSRF(跨站请求伪造)的侵害。达林提供一个很好的答案如何做到这一点 https://stackoverflow.com/questions/2350102/csrf-protection-in-ajax-requests-using-mvc2.
这将添加[ValidateAntiForgeryToken]
到你的控制器的方法,视图将需要包含类似的内容
var token = $('input[name=__RequestVerificationToken]').val();
$.post("/YourUrl", { 'IdsToDelete' : arrayVar, '__RequestVerificationToken': token }, function(data) { deleteCallback(data); });