所以我要做的是让用户选择要上传的文件。由于我只接受图像,我将测试扩展。我还想将文件大小限制在2mb以下,所以我将测试它(尚未在代码中实现)。如果他们选择的文件通过,那么我希望标签说“文件被接受”,并存储文件上传信息以便稍后点击按钮。一旦用户填写完表单的其余部分,就会发生这种情况。最后,我会在检查文件是否被允许时在页面上放置一个UpdateProgress控件。我宁愿不为此发回信息,所以如果我能让它发挥作用,那就太好了。顺便说一句,如果我从更新面板中取出标签,这一切都会正常工作。
当我运行它时会发生什么,是否会转到第一个if的else语句并返回“请选择一个文件”。意味着FileUpload1.HasFile返回false。我可以看到发生这种情况的唯一原因是因为UpdatePanel无法从FileUpload控件访问该信息?
代码背后:
Label SubmitButtonLabel2= (Label)UpdatePanel1.FindControl("SubmitButtonLabel");
if (FileUpload1.HasFile)
{
string[] fileName = FileUpload1.FileName.Split('.');
if ((fileName[fileName.Length - 1] == "jpg") ||
(fileName[fileName.Length - 1] == "gif") ||
(fileName[fileName.Length - 1] == "bmp") ||
(fileName[fileName.Length - 1] == "jpeg") ||
(fileName[fileName.Length - 1] == "png"))
{
SubmitButtonLabel2.Text = "File Accepted.";
}
else
{
SubmitButtonLabel2.Text = "File type not allowed. Please choose another.";
}
}
else
{
SubmitButtonLabel.Text = "Please select a file.";
}
Page:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div>
<asp:FileUpload ID="FileUpload1" runat="server" />
<asp:Button ID="SubmitButton" runat="server" Text="Submit File" OnClick=SubmitButton_Click />
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="always">
<ContentTemplate>
<asp:Label ID="SubmitButtonLabel" runat="Server" />
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="SubmitButton" />
</Triggers>
</asp:UpdatePanel>
</div>
</form>
</body>
答案 0 :(得分:23)
无需执行任何操作,只需将多部分数据属性添加到表单中即可。
Page.Form.Attributes.Add("enctype", "multipart/form-data");
有关详细信息,请参阅以下链接。
http://knowledgebaseworld.blogspot.com/2009/02/file-upload-not-working-with-update.html
答案 1 :(得分:12)
<Triggers>
<asp:PostBackTrigger ControlID="YourControlID" />
</Triggers>
添加UpdatePanel
的触发器并提供ControlID
。如果您使用TabContainer
,请使用选项卡容器的ID。
答案 2 :(得分:8)
在page_load
ScriptManager.GetCurrent(this).RegisterPostBackControl(this.Button);
答案 3 :(得分:5)
如果在“更新”面板中使用FileUpload控件,则必须为编写代码的按钮设置PostbackTrigger以保存上载文件。
现在关注代码我有btnSave按钮,用于将文件保存在upload文件夹中。所以我为它设置了postbacktrigger。
<Triggers>
<asp:PostBackTrigger ControlID="btnSave" />
</Triggers>
希望这会对你有所帮助。
答案 4 :(得分:4)
默认的asp.net FileUpload控件永远不会与UpdatePanel一起使用。您需要AjaxControl Toolkit中定义的特殊 AsyncFileUpload 控件。此
<强> http://www.asp.net/ajax/ajaxcontroltoolkit/samples/AsyncFileUpload/AsyncFileUpload.aspx 强>
alt text http://ruchitsurati.net/files/fileupload.png
<ajaxToolkit:AsyncFileUpload OnClientUploadError="uploadError"
OnClientUploadComplete="uploadComplete" runat="server"
ID="AsyncFileUpload1" Width="400px" UploaderStyle="Modern"
UploadingBackColor="#CCFFFF" ThrobberID="myThrobber" />
答案 5 :(得分:3)
不要忘记更改表单的类型,允许文件上传(enctype或类似的东西,我不在Visual Studio前面所以不能那么精确。)
我遇到了同样的问题。
答案 6 :(得分:3)
使按钮上传文件作为“上传”面板的触发器 像这样的东西,
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<ContentTemplate>
<asp:Panel ID="pnlUploadImage" runat="server">
<asp:FileUpload ID="fuldImage" runat="server"></asp:FileUpload>
<asp:LinkButton ID="lnkbUpload" runat="server" onclick="lnkbUpload_Click">Add</asp:LinkButton>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="lnkbUpload"/></Triggers>
</asp:UpdatePanel>
答案 7 :(得分:3)
在使用此处发布的两个解决方案后,我开始工作了。
我必须添加两个
Page.Form.Attributes.Add("enctype", "multipart/form-data");
在Page_Load上以及
<Triggers>
<asp:PostBackTrigger ControlID="btnUpload" />
</Triggers>
在更新面板的标记上。
答案 8 :(得分:2)
答案 9 :(得分:1)
You're answer can be found here
由于javascript和浏览器安全原因,默认情况下基本上不允许这样做。但这是一种解决方法。
答案 10 :(得分:0)
我的猜测是,只有在帖子已经完成时才会填写HasFile,而不是在此之前。
您可能想要在帖子完成之前检查FileUpload1.FileName是否已经填充,但我有点怀疑。