【问题标题】:Using form action within runat="server"在 runat="server" 中使用表单操作
【发布时间】:2012-03-06 18:06:28
【问题描述】:

我正在开发一个带有上传控件的页面。该控件非常复杂,并且在上传文件时不会回发。当不在带有runat="server" 的表单标签中时,它工作得非常好,因为它有自己的表单,带有将发布到 ashx 文件的发布操作。

问题是我现在想将此控件放在一个页面中,以及通过runat="server" 工作的其他asp.net 控件中。这意味着它周围的所有控件都需要位于带有runat="server" 的表单标签内。

这是控件的工作形式:

<form action="MyFileTransfer.ashx" method="post" enctype="multipart/form-data">

   // buttons etc.

</form>

如果我在我的母版页中放入 &lt;form runat="server"&gt;&lt;/form&gt; 包装它的全部内容,我会遇到问题。

解决此问题的最佳方法是什么?您有什么建议?

【问题讨论】:

  • 是什么触发了上传?
  • 有许多触发器,都在 web 处理程序中处理,但它们都是通过按钮单击来启动的。

标签: c# asp.net http-post ashx


【解决方案1】:

我不确定我是否理解触发上传的确切原因,但假设某个按钮正在提交表单。通常这是您所有控件都打开的页面,但您希望它发布到MyFileTransfer.ashx

因此,一种解决方案是以下步骤,您必须使用 JavaScript 在客户端执行这些步骤。

  1. 动态创建不可见的 IFRAME

  2. 将表单的目标设置为 IFRAME 的 ID

  3. 存储旧表单操作

  4. 设置表单动作为MyFileTransfer.ashx

  5. 提交表单

  6. 从表单中删除目标

  7. 恢复表单的旧动作。

上述步骤对于您的场景可能很简单,但适用于一般情况。希望这能让您找到解决问题的正确方向。

顺便说一句。我认为您已经在使用不允许的嵌套形式。 FORM 元素不能嵌套,一些浏览器会允许你这样做,但这并不意味着你应该这样做。

【讨论】:

  • 我想报告您的回答对我帮助很大。我试图让 jquery 文件上传(blueimp's)在我的 asp.net 网站上工作。它本身就可以工作,一旦我尝试将它放在我的站点中(并用表单 runat="server" 包围它),它就开始出现无声错误。将整个装置放在 iframe 中解决了这个问题。
【解决方案2】:

上传时最好使用ajax更新面板

【讨论】:

    【解决方案3】:

    我不认为你有这个运气,因为在你的情况下重定向不能工作,你不能动态更改表单的参数,因为回发已经准备好上传。 此外,您不能对所有发布数据使用相同的编码类型,因为您在此处尝试上传文件。

    一种可能的解决方案是在 iframe 中添加您的上传控件。并且由于该控件可以在更新后更改,因此您制作一个脚本,在回发后更新 iframe 的高度和宽度自动。

    相对于改变iframe高度:

    Scrolling iframe with main page side bar

    make iframe height dynamic based on content inside- JQUERY/Javascript

    顺便说一句,iframe 也不错,其他类似的控件使用 iframe 内部的 flash load 来进行上传。你也可以使用内部对话框来打开这个 iframe,就像这个例子中的 iframe 内容一样http://highslide.com/#examples

    【讨论】:

      【解决方案4】:

      我认为您可以在一页上放置 2 个表单。只要只有一个有runat="server"就没有错误

      以下文章描述更多细节:Form-based Programming in ASP.NET

      【讨论】:

      • 我知道我可以在一个页面上放置多个表单。我以为我在我的问题中强调了这一点。将我的 POST 表单放入 runat="server" 表单时,功能会发生变化。
      • 你的意思是你想把文件和其他字段一起发布回来吗?如果是这样,您必须在后面的代码中处理文件而不是 MyFileTransfer.ashx
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多