我正在开发一个将对其进行上传控制的页面。控件非常复杂,在上传文件时不会回发。当它不在带有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>
包含在整个内容的主页中,我会遇到问题。
最好的方法是什么?你推荐什么?
答案 0 :(得分:1)
我不确定我是否理解究竟是什么触发了上传,但是让我们说一些按钮正在执行表单提交。通常这是指所有控件都在的页面,但您希望它发布到MyFileTransfer.ashx
。
因此,一个解决方案将是以下步骤,您必须使用JavaScript在客户端执行这些步骤。
动态创建一个不可见的IFRAME
将表单的目标设置为IFRAME的ID
存储旧表单操作
将表单的操作设置为MyFileTransfer.ashx
提交表格
从表单中删除目标
恢复表单的旧操作。
上述步骤可能对您的方案而言很简单,但在一般情况下有效。希望这能帮助您找到解决问题的正确方向。
顺便说一句。我认为你已经在使用嵌套的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更新面板