【问题标题】:Update control in master page on childpage's postback在子页面的回发上更新母版页中的控件
【发布时间】:2014-08-22 22:12:50
【问题描述】:

页面右上角的小头像是母版页(asp:Image)的一部分,将在Page_load事件中显示。

在用于更新头像的内容页面中,保存按钮点击事件触发后,如何更新母版页上的图片,现在只更新了内容的大图(因为我放了代码在 Save_button 点击​​事件结束时更新它)。这里的想法是什么以及我应该遵循哪些步骤?

【问题讨论】:

  • "因为我把更新它的代码放在 Save_button 点击​​事件的末尾" 你不能对“母版页”图像做同样的事情吗?
  • 为什么要将它放在母版页中?
  • @Hoh 如果你能帮我大声笑,我很乐意,换句话说,如何访问母版页中的控件并更改它...?
  • 更新是通过 AJAX 进行的,因此页面不会刷新,这就是为什么您不能更改该母版页图像的原因?如果是这样,当用户帐户图像更新时,只需使用 javascript 替换该母版页 img 的图像源......此时它的所有客户端,所以它是子/母版页的事实并不重要。

标签: c# asp.net webforms master-pages


【解决方案1】:

先在子页面中使用MasterType属性(MasterPage为类名):

<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" 
    AutoEventWireup="true" CodeFile="Child1.aspx.cs" 
    Inherits="Child1" Title="Untitled Page" %>

<%@ MasterType TypeName="MasterPage" %>

然后,在 MasterPage 中,公开您希望子页面访问的任何属性或字段。

属性/字段应在子页面中以智能方式显示。

这是 MasterPage 的完整代码以及如何公开元素:

MasterPage.Master:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <asp:ContentPlaceHolder id="head" runat="server">
    </asp:ContentPlaceHolder>
</head>

<body>
    <form id="form1" runat="server">
        <asp:image id="_MyImage" runat="server"></asp:image>
    <div>
        <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">

        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>

MasterPage.Master.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class MasterPage : System.Web.UI.MasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    public Image MyImage
    {
        get { return _MyImage; }   
    }
}

【讨论】:

  • 我这样做了,但我在母版页中没有看到 的任何智能感知,您能否演示一些您的想法的代码,例如如何访问标签和图像子页面上的母版页?顺便说一句,我使用:Image newID = (Image)Master.FindControl("imgID"); 基本上在子页面上找到母版页的图像并且它有效,但我仍然想了解你的想法。
  • 使用 MasterType 时是否编译?我记得,智能感知“赶上”代码需要一段时间。
  • 它不会构建,你如何访问,比如说,在子页面代码后面的名为 MainMaster 的母版页上的 asp:image ID="imgProfile"?
  • 好的,所以我尝试了:MainMaster.imgProfile.ImageUrl = .... 它说:...非静态字段需要对象引用、方法或属性... AND ...由于其保护级别而无法访问... 如何让 img 在母版页中公开,以便子页可以访问它?
【解决方案2】:

尝试从用户控件引发事件并让母版页处理该事件。

这是一个例子:

http://snippets.surfthru.com/post/ASPNET-Raise-Event-on-Parent-Page-from-User-Control

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2010-11-25
  • 1970-01-01
相关资源
最近更新 更多