FileUpload 控件在第二次单击时工作,但不是第一次尝试保存发布的文件?

FileUpload control working on second click but not first attempt of saving posted file?

提问人:Splunk 提问时间:7/20/2012 最后编辑:CommunitySplunk 更新时间:4/1/2023 访问量:8286

问:

我的问题

我设法回答了自己,但是同一组功能还有另一个问题。出于某种原因,已发布文件的 save 事件的第一次回发命中了 Ol' Object not set to an instance of an object 错误,但在第二次尝试上传文件并触发我的保存事件(转换为 byte[] 存储为 SQL Server BLOB)时,它会执行应该执行的所有操作。

同样的问题在这里

有一个很好的建议是使用 AJAX AsyncUpload 控件,但是我坚信消除原因而不是解决问题。我将继续沿着这条路走下去,以最好地理解 asp.net 等。

你们中间是否有人可以帮助我确定为什么我在第一次回发时收到“object ref not set to inst of obj”错误,但在第二次回发时它工作正常。内容页有一个母版页,该母版页将内容页包装在更新面板中。这不是我决定这样做的决定。还有一个更新面板,其中包含针对我的保存事件的回发触发器。

人们,你有什么想法?

C# asp.net 文件上传 回发 AsyncPostBackError

评论


答:

14赞 Kevin Main 7/20/2012 #1

问题(如图 http://forums.asp.net/t/1060363.aspx 所示)似乎出在周围面板上使用可见性属性时(因为您似乎来自链接的问题)。

建议的解决方法是改用 CSS 可见性,因此使用它使其不可见 -

<asp:Panel ID="pnlUpload" runat="server" class="workerDetailsPanelLeft" style="display:none">

线程对此的解释是

如果容器设置为不可见,则上载控件实际上不会呈现为 HTML,从而导致窗体的 enctype 未设置为 enctype=“multipart/form-data”,从而导致文件上载控件不会将所选文件发布回服务器。解决方法是确保将 FileUpload 控件呈现为 HTML(方法是将其样式设置为 display:none 而不是 Visible=false),或者手动设置 enctype

因此,另一种解决方法是将表单标记更改为此

<form id="form1" enctype="multipart/form-data" runat="server">

我认为其中任何一个都应该解决您的问题。

评论

1赞 Splunk 7/20/2012
太好了,我现在明白了。非常感谢您指出这一点。我显然忽略了它。+1 并回答 :-)
6赞 Muhammedh 5/8/2014 #2

你可以通过Page_Load事件的代码做同样的事情。输入此代码,它将解决问题。

Page.Form.Attributes.Add("enctype", "multipart/form-data");