2
<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 中正常工作。问题在于视图 2

该文件上传有什么问题?

4

6 回答 6

2

尝试在页面生命周期的早期使用RegisterPostBackControl 注册按钮控件:

   protected void Page_Init(object sender, EventArgs e)
   {
       ScriptManager1.RegisterPostBackControl(Button1);
   }

也可以看看:

FileUpload 和 UpdatePanel:ScriptManager.RegisterPostBackControl 第二次工作。

于 2011-03-02T08:36:43.037 回答
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>

于 2018-05-14T19:55:33.073 回答
0

问题很可能是 UpdatePanel 将其内部控件的所有请求“转换”为 AJAX 请求,而 FileUpload 不适用于 AJAX。如果你用谷歌搜索“fileupload updatepanel”,你会看到一堆文章和可能的解决方法。

它在 View2 中不起作用的原因是 ID 为“Button1”的按钮在 UpdatePanel 的触发器部分中定义了一个触发器。为按钮定义这样的触发器将“ajaxify”它,因此按下按钮将发送 AJAX 请求而不是“正常”回发。

于 2011-03-02T07:27:24.417 回答
0

您是否尝试过 AjaxControlToolkit 中的 AsyncFileUpload 控件?

http://www.asp.net/ajax/ajaxcontroltoolkit/Samples/AsyncFileUpload/AsyncFileUpload.aspx

Classic FileUpload 不能很好地与 AJAX 和 UpdatePanel 一起使用。

于 2011-03-02T07:49:52.287 回答
0

获取自http://forums.asp.net/p/1105208/1689084.aspx

要在 UpdatePanel 控件中使用 FileUpload 控件,请将提交文件的回发控件设置为面板的 PostBackTrigger 控件。

或者,您可以使用 iframe。具体的代码我现在没有,但是如果你想要的话,我可以在有机会打开我的旧驱动器时将它挖掘出来。

至于文件在视图2中不再可用的问题,您可能尝试将文件保存在视图1中,然后稍后在视图2中检索。原因可能是因为文件在视图1中提交了一次并且从未在视图 2 中重新提交。

于 2011-03-02T08:00:07.110 回答
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>
于 2018-10-24T07:12:15.483 回答