在runat =“server”中使用表单操作

时间:2012-02-15 11:42:21

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

我正在开发一个将对其进行上传控制的页面。控件非常复杂,在上传文件时不会回发。当它不在带有runat="server"的表单标签中时,它可以正常工作,因为它有自己的表单,后期操作将发布到ashx文件。

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

以下是控件在其中的作用形式:

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

   // buttons etc.

</form>

如果我将<form runat="server"></form>包含在整个内容的主页中,我会遇到问题。

最好的方法是什么?你推荐什么?

4 个答案:

答案 0 :(得分:1)

我不确定我是否理解究竟是什么触发了上传,但是让我们说一些按钮正在执行表单提交。通常这是指所有控件都在的页面,但您希望它发布到MyFileTransfer.ashx

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

  1. 动态创建一个不可见的IFRAME

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

  3. 存储旧表单操作

  4. 将表单的操作设置为MyFileTransfer.ashx

  5. 提交表格

  6. 从表单中删除目标

  7. 恢复表单的旧操作。

  8. 上述步骤可能对您的方案而言很简单,但在一般情况下有效。希望这能帮助您找到解决问题的正确方向。

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

答案 1 :(得分:0)

我认为你可以在一个页面上放两个表格。只要只有一个有runat =“server”

,就没有错误

以下文章介绍了更多详情:Form-based Programming in ASP.NET

答案 2 :(得分:0)

我不是说你运气不好因为以太重定向无法在你的情况下工作,以后你不能在飞行中改变表格的参数,因为回发已经准备好完成上传了。 此外,您无法对所有发布数据使用相同的enctype,因为您尝试上传文件。

一种可能的解决方案是在iframe中添加上传控件。并且因为控件可以在更新后更改,所以您创建的脚本会在回发后更新iframe的高度和宽度自动。

相对于更改iframe高度:

Scrolling iframe with main page side bar

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

顺便说一句,iframe也不错,其他类似的控件使用iframe中的flash加载进行上传。您也可以使用内部对话框来打开此iframe,例如此示例中的iframe内容http://highslide.com/#examples

答案 3 :(得分:-2)

最好围绕上传使用ajax更新面板