【问题标题】:Scriptmanager on one page, but the Panel on anotherScriptmanager 在一个页面上,而 Panel 在另一个页面上
【发布时间】:2011-10-30 21:36:37
【问题描述】:

我有一个 .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 的面板。问题是 FileUpload 没有找到该文件。这里我想给Scriptmanager添加RegisterAsyncPostBackControl,但是面板在另外一个页面的时候怎么做呢?

嵌套页面代码如下所示

<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 的代码示例,因为我是新手 ^^

谢谢

【问题讨论】:

  • 好吧,我找到了这个解决方案 ScriptManager scriptmanager = ScriptManager.GetCurrent(this.Page); scriptmanager.RegisterAsyncPostBackControl();但问题是,我不知道究竟要填写什么 RegisterAsyncPostBackControl
  • Panel 的可见标志将设置为 true,我猜? “FileUpload 找不到文件”是什么意思?您要上传的文件有多大?
  • 是的,当代码到达上传部分时,面板设置为可见 = true。每当我上传文件(8,70 KB)时,File1.HasFile = false

标签: c# asp.net ajax updatepanel scriptmanager


【解决方案1】:

如果您需要在内容页面上使用 ScriptManager,您也可以使用 ScriptManagerProxy 类,但我不确定您是否需要它。您真的需要在每个内容页面上都有一个 UpdatePanel 吗? (因为您在母版页上声明了它)。我认为在内容页面中声明 UpdatePanel 可能会更好。

尝试为你的链接按钮定义一个触发器,否则 HasFiles 总是错误的

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

【讨论】:

  • 每个页面上UpdatePanels的原因是页面对于某些用户来说看起来不同^^
  • 标签在 标签内无效,您是否建议我将触发器放在 .master 页面上的 中,并设置 ControlID = 嵌套页面上的上传按钮?
  • 我不确定这是否可行,至少在我的测试项目中不行。我个人觉得将 UpdatePanel 放在内容页面上会更好。无论如何,更新区域应该尽可能小。
  • 我明白了。您可以通过任何方式将其修复为当前状态,因为目前无法减小 的大小。
  • 在您的母版页顶部,您可以找到@Master 标记。有一个名为 Inherits 的属性定义了类。或者你在文件的代码中找到它。我建议你在继续之前阅读一本好的 asp.net 书籍,否则你会有很多悬而未决的问题 ;-)
猜你喜欢
  • 1970-01-01
  • 2013-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多