Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 文件上载在Multiview和updatepanel中不起作用_C#_Asp.net_Ajax_Updatepanel_Multiview - Fatal编程技术网

C# 文件上载在Multiview和updatepanel中不起作用

C# 文件上载在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的触发器部

当我第一次点击上传图像的按钮1时,fileupload2.HasFile返回“false”

在不重新刷新页面的情况下,尝试上载相同的图片,然后fileupload2.HasFile返回“true”

在视图1中正常工作。问题在于视图2


文件上传有什么问题?

问题很可能是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>