【问题标题】:Nested Form Problem in ASP.NETASP.NET 中的嵌套表单问题
【发布时间】:2010-11-04 08:57:28
【问题描述】:

我想在单击按钮时显示一个弹出窗口。弹出窗口应该有一个文件上传控件。 我需要实现上传功能。

基本页面有嵌套表单。总共嵌套了三个表格。如果我评论这两个表单,那么我可以从请求对象中获取发布的文件。但我不应该评论其他两种形式。使用嵌套表单,我没有从 Request 对象中获取发布的文件。

我需要一些协议来实现这个。

我正在使用 C#。弹出窗口是使用 jQuery 设计的。

按照建议,我在此处发布示例代码。

<form id="frmMaster" name="frmMaster" method="post" action="Main.aspx" Runat="server" enctype="multipart/form-data">

<form method='Post' name='frmSub'>                      
<input type="hidden" name='hdnData' value=''>                   
</form> // This form is driven dynamically from XSL


<form method='Post' name='frmMainSub'>                      
<input type="hidden" name='hdnSet' value=''>                    
</form>


</form>

注意:

注释内部表单可以正常工作。但是因为它需要其他功能,所以不应该触及这些表单。

我已经给出了这个代码作为示例。此页面中的实际 LOC 为 1200。第二个表单动态加载了许多控件。我被要求不要碰现有的表格。是否可以使用嵌套表单执行此功能?

【问题讨论】:

  • 如果可以,请避免弹出窗口,它们是邪恶的。用户在遇到弹出窗口时会失去工作流程。
  • 我会说不,不可能用嵌套表单来做到这一点,因为嵌套表单不是合法的 HTML,我想当你嵌套时没有明确定义的行为可以合理地期望表格。

标签: c# asp.net jquery file-upload nested-forms


【解决方案1】:

您可以在一个页面中拥有多个 HTML 表单标签,但它们不能相互嵌套。您需要删除嵌套才能使其正常工作。如果您发布一些代码,您可能会在一些具体建议方面获得更多帮助来解决这个问题。

从您发布的代码中,我们也不清楚您为什么会尝试使用多种表单。你能详细说明为什么你认为你需要多种表格吗?您的子表单中没有明确的操作,因此很难说出您希望他们发布的位置,但我猜它们都发布到同一页面。那么,为什么要使用多种形式呢?

【讨论】:

  • //这个表单是从XSL动态驱动的
  • ...我看到您在您的问题中发布了这个,实际上...尝试再做一次,但将所有行缩进 4 次,因为该页面实际上正在使用您的
    标签..
  • asp.net 页面需要一个带有 runat="server" 属性的
    标记才能运行,并且几乎所有其他内容都必须驻留在该表单标记中才能使页面按预期工作,如果你想利用 asp.net 的所有抽象。
【解决方案2】:

在您的情况下,无论您如何表达,您都在寻找黑客攻击。你不应该有嵌套的表单。

由于您使用 Javascript 来执行此操作,您可以尝试将正在回发的表单元素移出父表单,然后执行 .submit() 移动后的操作。

这是一个丑陋的 hack - 但 HTML 也是如此 - :)(我孩子,我孩子!)

【讨论】:

  • 这是一个现有的页面,我对此无能为力。 :)
  • 我并不是说你移动了实际的 HTML - 我建议你使用 Javascript 即时重建它,而是在父表单之外构建它,然后从那里提交
【解决方案3】:

您总是可以尝试将其中一个内部表单放到另一个页面上并在 iframe 中提供它。这样,内部形式在技术上不在外部形式内部。这将要求您更改一些 html,但实际上没有办法解决。

【讨论】:

  • 不要在 2020 年使用 iframe。(或之后)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多