C# FileUpload和UpdatePanel:ScriptManager.RegisterPostBackControl第二次工作
我正在用C#和VisualStudio2008SP1开发一个ASP.NET应用程序。我正在使用网络表单 我有一个带有两个UpdatePanel的ASPX页面,一个在左侧保存一个TreeView,另一个在右侧动态加载用户控件 我在右面板上使用的一个用户控件有一个FileUpload控件和一个按钮,用于将该文件保存到服务器上。保存控件的ascx代码为: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
<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