我可以在 ASP.net MVC RC2 中的另一个表单标签中使用一个表单标签吗

2024-01-03

我目前正在 MVC2 中开发应用程序 我想在我的应用程序中使用多个表单标签 在我看来 我创建了一个具有删除选项的表,我正在通过“发布个人删除”来执行此操作,因此我为每个按钮创建了表单标记。 我还希望用户提供删除多个记录的选项,因此我为他们提供复选框。此表单应包含复选框的所有值和所有值。 所以表单会像这样渲染

对于每个删除按钮

 <form action="/Home/MutipleDelete" method="post">   
<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;"  />

<input id="chk1" name="chk1" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member1" />

     <input type="hidden" name="hfmem1" id="hfmem1" value="1"  />  

                 </form>
<input id="chk2" name="chk2" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member2" />

     <input type="hidden" name="hfmem2" id="hfmem2" value="2"  />  

                 </form>


           </form>

以下不起作用。但如果我编写表单以这种方式呈现的代码

    <form action="/Home/MutipleDelete" method="post">   

<input class="button " name="Compare" type="submit" value="Mutipledelete" style="margin-right:132px;"  />
</form>
<input id="chk1" name="chk1" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member1" />

     <input type="hidden" name="hfmem1" id="hfmem1" value="1"  />  

                 </form>
<input id="chk2" name="chk2" type="checkbox" value="true" />

<form action="/Home/Delete" method="post"> 

    <input type="submit"  class="submitLink"  value="member2" />

     <input type="hidden" name="hfmem2" id="hfmem2" value="2"  />  

                 </form>

它在 Mozilla 中工作,但在 IE 中不起作用。我在控制器中的 formcollection 中进行了调试和检查值。该怎么办?


在 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); });
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以在 ASP.net MVC RC2 中的另一个表单标签中使用一个表单标签吗 的相关文章

随机推荐