Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.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# FileUpload和UpdatePanel:ScriptManager.RegisterPostBackControl第二次工作_C#_Asp.net Ajax_File Upload_Updatepanel - Fatal编程技术网

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

C# FileUpload和UpdatePanel:ScriptManager.RegisterPostBackControl第二次工作,c#,asp.net-ajax,file-upload,updatepanel,C#,Asp.net Ajax,File Upload,Updatepanel,我正在用C#和VisualStudio2008SP1开发一个ASP.NET应用程序。我正在使用网络表单 我有一个带有两个UpdatePanel的ASPX页面,一个在左侧保存一个TreeView,另一个在右侧动态加载用户控件 我在右面板上使用的一个用户控件有一个FileUpload控件和一个按钮,用于将该文件保存到服务器上。保存控件的ascx代码为: <asp:UpdatePanel ID="UpdatePanelBotons" runat="server" RenderMode="Inli

我正在用C#和VisualStudio2008SP1开发一个ASP.NET应用程序。我正在使用网络表单

我有一个带有两个UpdatePanel的ASPX页面,一个在左侧保存一个TreeView,另一个在右侧动态加载用户控件

我在右面板上使用的一个用户控件有一个FileUpload控件和一个按钮,用于将该文件保存到服务器上。保存控件的ascx代码为:

<asp:UpdatePanel ID="UpdatePanelBotons" runat="server" RenderMode="Inline" 
    UpdateMode="Conditional">
<ContentTemplate>
    <asp:Button ID="Save" runat="server" Text="Guardar" 
                onclick="Save_Click" CssClass="button" />
    </ContentTemplate>
    <Triggers>
        <asp:PostBackTrigger ControlID="Save" />
    </Triggers>
</asp:UpdatePanel>

谢谢。

填充上传需要完整的帖子,如果您使用更新面板,它会部分发回。因此,文件上传本身无法工作。您必须通过调用
RegisterPostBackControl
以不同的方式处理它


有关详细信息,请参阅此链接-->

,以响应您的第二次更新

我遇到了这个问题,我相信这与您在UpdatePanel中向页面添加动态控件有关

也许有更好的方法可以做到这一点,因为我当然不是ASP.NET专家,但我能够自己解决这个问题,方法是将控件添加到使用CSS隐藏的div中-之前-它是需要的,然后自动增加“虚拟”控件的ID以避免冲突,并且我可以继续添加任意数量的控件。这样,当UpdatePanel被触发时,它会完全识别控件及其内容,当然隐藏的控件除外

我正在使用XSL将XML转换为包含ASP.NET控件的动态页面,因此基本上我做了以下工作:

<div class="hide">
    <asp:FileUpload CssClass="upload" identity="addVersion_{@id}_{count(draft) + 1}" runat="server" />
    <asp:Button Text="Add File" identity="addVersionBtn_{@id}_{count(draft) + 1}" fileControlIdentity="addVersion_{@id}_{count(draft) + 1}" action="addVersion" runat="server" />
</div>


我删去了很多代码,但它仍然应该能让人理解其大意:)

对我来说,这个解决方案很有效:

加 Page.Form.Attributes.Add(“enctype”、“多部分/表单数据”)

第一次回发时缺少enctype属性


在表单标签中添加以下内容:


enctype=“multipart/form data”

我不得不在这里将这两种建议结合起来。我使用UpdatePanel动态加载UserControl,文件上载在UserControl中。我必须:

  • 用户控件的页面加载中的RegisterPostBackControl

  • 将enctype=“multipart/form data”添加到页面的表单元素中,该元素包含更新面板、code page.form.Attributes.add(“enctype”、“multipart/form data”);对我不起作用,它必须在aspx中


希望这有帮助。

它对我有用,只有当我把它放在页面上时

Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    Page.Form.Attributes.Add("enctype", "multipart/form-data")
End Sub

好啊如何在页面的用户控件中注册按钮。我看到我只能注册孔控制。假设用户控件是myUserControl,按钮是Save。我可以执行类似ScriptManager1.RegisterPostBackControl(myUserControl.Save)的操作吗;我不想每次用户单击该用户控件中的按钮时都进行完整回发。我已更新了我的问题。我正在做一个完整的回发,但是文件上传不起作用。非常感谢你的贡献。Bump。你应该接受其中一个答案。
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
    //Code to generate the data (stripped out because it is generated in a different manner than the original poster)

    //Add events for all of the new-found controls depending on their type
    recursiveAddEvents(nameOfPlaceHolder.Controls)
End Sub


//Add events for all of the new-found controls depending on their type
Sub recursiveAddEvents(ByRef controls As ControlCollection)
    For Each con As Control In controls
        If con.Controls.Count > 0 Then
            recursiveAddEvents(con.Controls)
        End If

        //Try to cast the control to different data types
        Dim btn As Button = TryCast(con, Button)
        Dim file As FileUpload = TryCast(con, FileUpload)

        //Test to see which type the control was and apply the actions to it
        If Not btn Is Nothing Then
            //Assign the correct click events
            If btn.Attributes.Item("action") = "addVersion" Then
                AddHandler btn.Click, AddressOf addDraftVersion
                btn.ID = btn.Attributes.Item("identity")

                //Register the control with the ScriptManager
                ScriptManager.GetCurrent(Page).RegisterPostBackControl(btn)
            End If
        ElseIf Not file Is Nothing Then
            //Assign the correct click events
            file.ID = file.Attributes.Item("identity")
        End If
    Next
End Sub

Protected Sub addDraftVersion(ByVal sender As Button, ByVal e As EventArgs)
    Dim fileName as String = sender.Attributes("title").Replace(" ", "_") & "_D" & info("draftID") & "_V" & info("versionID")
    Dim inputControl As FileUpload = TryCast(trackPH.FindControl(sender.Attributes("fileControlIdentity")), FileUpload)

    If inputControl Is Nothing Then
        Exit Sub
    End If

    //Do whatever need to be done

    //Trigger UpdatePanel(s)
    nameOfUpdatePanel.Update()
End Sub
Private Sub Page_Init(sender As Object, e As EventArgs) Handles Me.Init
    Page.Form.Attributes.Add("enctype", "multipart/form-data")
End Sub