C# 文件上载在Multiview和updatepanel中不起作用
当我第一次点击上传图像的按钮1时,fileupload2.HasFile返回“false” 在不重新刷新页面的情况下,尝试上载相同的图片,然后fileupload2.HasFile返回“true” 在视图1中正常工作。问题在于视图2C# 文件上载在Multiview和updatepanel中不起作用,c#,asp.net,ajax,updatepanel,multiview,C#,Asp.net,Ajax,Updatepanel,Multiview,当我第一次点击上传图像的按钮1时,fileupload2.HasFile返回“false” 在不重新刷新页面的情况下,尝试上载相同的图片,然后fileupload2.HasFile返回“true” 在视图1中正常工作。问题在于视图2 文件上传有什么问题?问题很可能是UpdatePanel将所有来自控件的请求“转换”为AJAX请求,而文件上传不适用于AJAX。如果您愿意,您将看到一堆文章和可能的解决方法 它在View2中不工作的原因是id为“Button1”的按钮在UpdatePanel的触发器部
文件上传有什么问题?问题很可能是UpdatePanel将所有来自控件的请求“转换”为AJAX请求,而文件上传不适用于AJAX。如果您愿意,您将看到一堆文章和可能的解决方法
它在View2中不工作的原因是id为“Button1”的按钮在UpdatePanel的触发器部分中定义了一个触发器。为按钮定义这样的触发器将“ajaxify”它,因此按下按钮将发送AJAX请求,而不是“正常”回发。您是否尝试过AjaxControlToolkit中的AsyncFileUpload控件 经典的文件上传在AJAX和UpdatePanels中效果不佳。从 在内部使用FileUpload控件的步骤 UpdatePanel控件,设置回发 控件,该控件将文件提交为 面板的后向触发控制 或者,可以使用iframe。我现在不知道具体的代码,但如果你需要,我可以在有机会打开旧硬盘时把它挖出来
至于文件在视图2中不再可用时的问题,您可能可以尝试在视图1中保存该文件,然后稍后在视图2中检索它。原因可能是文件在视图1中提交一次,而在视图2中从未重新提交。尝试在页面生命周期的早期向注册按钮控件:
protected void Button1_Click(object sender, EventArgs e)
{
if (fileupload2.HasFile)
{
//code..
}
}
protected void Unnamed1_Click(object sender, EventArgs e)
{
MultiView1.ActiveViewIndex = 1;
}
另见:
我不知道为什么,但当我从multiview中添加一个假的上传文件时,文件上传在view2中正常工作 我希望这仍然可以帮助一些人 编写应该可以工作但不能按预期工作的示例
形象
有时,您必须为文件上载的每个事件设置触发器回发。甚至,这个按钮也可以显示文件上传的位置
所以,试试这个。它应该会起作用
<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>
我找到了很多文章。。但是没有找到任何解决办法。。它在view1中正常工作。。。但问题在于view2
protected void Page_Init(object sender, EventArgs e)
{
ScriptManager1.RegisterPostBackControl(Button1);
}
<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>
<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>