<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel runat="server">
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
<asp:MultiView ID="MultiView1" runat="server"
ActiveViewIndex="0">
<asp:View ID="View1" runat="server">
<asp:Button Text="next"
runat="server" onclick="Unnamed1_Click" />
</asp:View>
<asp:View ID="View2" runat="server">
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"
style="width: 56px" />
<asp:FileUpload ID="fileupload2" runat="server" />
</asp:View>
</asp:MultiView>
</ContentTemplate>
</asp:UpdatePanel>
,背后的代码是
protected void Button1_Click(object sender, EventArgs e)
{
if (fileupload2.HasFile)
{
//code..
}
}
protected void Unnamed1_Click(object sender, EventArgs e)
{
MultiView1.ActiveViewIndex = 1;
}
当我第一次点击Button1上传图片时,fileupload2.HasFile返回“false”
再没有重新刷新页面尝试上传相同的图片然后fileupload2.HasFile返回“true”
在View1中正常工作。问题在于View 2
该文件上载有什么问题?
答案 0 :(得分:2)
尝试在页面生命周期的早期使用RegisterPostBackControl注册按钮控件:
protected void Page_Init(object sender, EventArgs e)
{
ScriptManager1.RegisterPostBackControl(Button1);
}
另见:
FileUpload and UpdatePanel: ScriptManager.RegisterPostBackControl works the second time.
答案 1 :(得分:1)
我不知道为什么,但是当我从多视图中添加假上传文件时,文件上传在view2中正常工作。
我希望这仍然有助于某人
应该有效的代码示例,但不能按预期工作
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:MultiView ActiveViewIndex="0" runat="server" ID="mv">
<asp:View runat="server" ID="view1">
<asp:Button ID="change" Text="Change View" runat="server" OnClick="change_Click" />
</asp:View>
<asp:View runat="server" ID="view2">
<div id="divLogo" runat="server" class="form-group">
<label class="control-label">Image</label>
<ajaxToolkit:AsyncFileUpload ID="fileUploadImage" runat="server"
AllowMultiple="false" CssClass="fileUpload" PersistFile="true" />
</div>
<asp:Button ID="save" Text="Save" runat="server" OnClick="save_Click" />
</asp:View>
</asp:MultiView>
</ContentTemplate>
</asp:UpdatePanel>
使用辅助伪文件上载按预期工作的代码示例
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">
<asp:UpdatePanel runat="server">
<ContentTemplate>
<div style="display: none;">
<ajaxToolkit:AsyncFileUpload ID="AsyncFileUploadFake" runat="server"
AllowMultiple="false" CssClass="fileUpload" PersistFile="true" />
</div>
<asp:MultiView ActiveViewIndex="0" runat="server" ID="mv">
<asp:View runat="server" ID="view1">
<asp:Button ID="change" Text="Change View" runat="server" OnClick="change_Click" />
</asp:View>
<asp:View runat="server" ID="view2">
<div id="divLogo" runat="server" class="form-group">
<label class="control-label">Image</label>
<ajaxToolkit:AsyncFileUpload ID="fileUploadImage" runat="server"
AllowMultiple="false" CssClass="fileUpload" PersistFile="true" />
</div>
<asp:Button ID="save" Text="Save" runat="server" OnClick="save_Click" />
</asp:View>
</asp:MultiView>
</ContentTemplate>
</asp:UpdatePanel>
答案 2 :(得分:0)
问题很可能是UpdatePanel将其内部控件的所有请求“转换”为AJAX请求,而FileUpload不能与AJAX一起使用。如果你Google for "fileupload updatepanel",你会看到一堆文章和可能的解决方法。
它在View2中不起作用的原因是id为“Button1”的按钮具有在UpdatePanel的触发器部分中定义的触发器。为按钮定义这样的触发器将“ajaxify”它,因此按下按钮将发送AJAX请求而不是“正常”回发。
答案 3 :(得分:0)
您是否尝试过AjaxControlToolkit中的AsyncFileUpload控件?
http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx
Classic FileUpload与AJAX和UpdatePanels不能很好地协同工作。
答案 4 :(得分:0)
从http://forums.asp.net/p/1105208/1689084.aspx获得
在一个内部使用FileUpload控件 UpdatePanel控件,设置回发 将文件提交为a的控件 面板的PostBackTrigger控件。
或者,您可以使用iframe。具体的代码现在不在我身边,但是如果你想要它,我可以在有机会打开我的旧驱动器的时候把它挖出来。
对于视图2中文件不再可用时的问题,您可能会尝试将文件保存在View 1中,然后在View 2中检索它。原因可能是因为文件在视图中提交一次1并且从未在视图2中重新提交。
答案 5 :(得分:0)
有时,您必须为文件上传周围的每个事件设置触发器回发。甚至,该按钮也可以显示文件上传位置。
所以,尝试一下。应该可以。
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel runat="server">
<Triggers>
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
<ContentTemplate>
<asp:MultiView ID="MultiView1" runat="server"
ActiveViewIndex="0">
<asp:View ID="View1" runat="server">
<asp:Button Text="next" id="btnNext"
runat="server" onclick="Unnamed1_Click" />
</asp:View>
<asp:View ID="View2" runat="server">
<asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button"
style="width: 56px" />
<asp:FileUpload ID="fileupload2" runat="server" />
</asp:View>
</asp:MultiView>
</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="btnNext" />
<asp:PostBackTrigger ControlID="Button1" />
</Triggers>
</asp:UpdatePanel>