我有一个带
的.Master页面 <asp:ScriptManager ID="ScriptManager" runat="server" />
<asp:UpdatePanel runat="server" id="UpdatePanel" updatemode="Conditional">
<ContentTemplate>
<asp:ContentPlaceHolder ID="MasterIndhold_Member" runat="server">
</asp:ContentPlaceHolder>
在ContentPlaceHolder中,我得到了一个带有FileUpload的Panel。问题是FileUpload找不到该文件。在这里,我想将RegisterAsyncPostBackControl添加到Scriptmanager,但是当面板在另一个页面上时我该如何做?
嵌套页面代码如下所示
<asp:Content ID="Content3" ContentPlaceHolderID="MasterIndhold_Member" runat="server">
<asp:panel runat="server" ID="Panel_MyProfile_Member" Visible="false">
<asp:FileUpload ID="File1" runat="server" />
<asp:LinkButton ID="LinkUploadImageMember" runat="server" onclick="LinkUploadImageMember_Click">Upload</asp:LinkButton>
FileUpload的CodeBehind看起来像这样
protected void LinkUploadImageMember_Click(object sender, EventArgs e)
{
if (File1.HasFile == true)
{
if ((File1.PostedFile.FileName.EndsWith(".jpg")) || (File1.PostedFile.FileName.EndsWith(".jpeg")) || (File1.PostedFile.FileName.EndsWith(".png")))
{
byte[] input = File1.FileBytes;
Bruger.UploadImage(input, int.Parse(Request.QueryString["ID"]));
}
}
}
请将代码示例保存到C#和ASP.NET,因为我是这个东西的新手^^
由于
答案 0 :(得分:2)
如果您的内容页面上需要ScriptManager,您也可以使用ScriptManagerProxy类,但我不确定您是否需要这个。你真的需要在每个内容页面上都有一个UpdatePanel吗? (因为你在母版页上声明了它)。我认为在内容页面中声明UpdatePanel可能更好。
尝试为linkbutton定义触发器,否则HasFiles始终为false
<asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional">
<Triggers>
<asp:PostBackTrigger ControlID="LinkUploadImageMember" />
</Triggers>
<ContentTemplate>
<asp:FileUpload ID="File1" runat="server" />
<asp:LinkButton ID="LinkUploadImageMember" runat="server" Text=" upload " />
</ContentTemplate>
</asp:UpdatePanel>
如果您无法从母版页中删除UpdatePanel,则可以在母版页上公开一个属性,以便访问更新面板,如下所示:
public UpdatePanel MyUpdatePanel
{
get { return UpdatePanel1; }
}
您可以从内容页面访问更新面板并以编程方式更新触发器:
protected void Page_Load(object sender, EventArgs e)
{
((Site)Master).MyUpdatePanel.Triggers.Add(new PostBackTrigger() {
ControlID = LinkUploadImageMember.UniqueID });
}