Scriptmanager在一个页面上,但Panel在另一个页面上

时间:2011-10-30 21:36:37

标签: c# asp.net ajax updatepanel scriptmanager

我有一个带

的.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,因为我是这个东西的新手^^

由于

1 个答案:

答案 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 });
}