【问题标题】:Call masterpage function from contentpage in asp.net?从asp.net中的contentpage调用masterpage函数?
【发布时间】:2014-05-09 22:08:03
【问题描述】:

我在母版页上有一个函数,我想从代码隐藏的内容页面调用它。

这是我的尝试:

ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "alert__", string.Format("setStatusBarMessage('{0}',{1});", barMessage, type, ""), true);

“setStatusBarMessage”函数在 masterpage 中声明,所以这段代码不起作用。

setStatusBarMessage 是一个客户端函数。

母版页:

<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Content.master.cs" 

Inherits="F8.CRM.Pages.Content" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<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:ScriptManager runat="server" />
    <div>
        <asp:ContentPlaceHolder ID="MainContent" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    </form>
</body>
</html>
<script type="text/javascript">


    function hello() {
        alert('hi mennan');
    }

</script>

内容页面:

<%@ Page Title="" Language="C#" MasterPageFile="~/Pages/Content.Master" AutoEventWireup="true"
    CodeBehind="Departman.aspx.cs" Inherits="F8.CRM.Departman" %>

<%@ Register Src="~/Controls/Objects/StudioSideBox/StudioSideBox.ascx" TagName="StudioSideBox"
    TagPrefix="uc1" %>
<%@ Register Src="~/Controls/Objects/Baslik/Baslik.ascx" TagName="Baslik" TagPrefix="uc2" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

     my html...

    <script type="text/javascript">

       my script codes...


    </script>

</asp:Content>

此母版页和内容页位于 iframe 对象下。

【问题讨论】:

  • 是客户端功能还是?
  • 我认为如果它们在客户端,则无需明确包含这些功能,它们应该已经在内容页面上。
  • edited ,它是一个客户端函数
  • 我认为您需要调用 RegisterStartupScript 而不是 RegisterClientScriptBlock。请参阅拉曼的答案。
  • @Mennan 如果我们的回答解决了您的问题,请接受......

标签: javascript asp.net master-pages


【解决方案1】:

好的,试试下面的代码

我在母版页中有一个功能是

<script>
    function hello() {
        alert('hi');
    }

</script>

现在在内容页面的页面加载中

 protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ntmtch", "hello();", true);
}

它工作。我没有向内容页面添加任何内容。

更新

母版页的代码

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script>
    function hello() {
        alert('hi');
    }

</script>
<asp:ContentPlaceHolder id="head" runat="server">

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

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

第一个内容页面的代码

<%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true"
CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
<iframe src="Default2.aspx"></iframe>
</asp:Content>

第一个内容页面的代码:

 protected void Page_Load(object sender, EventArgs e)
{
    ScriptManager.RegisterStartupScript(this, this.GetType(), "ntmtch", "hello();", true);
}

【讨论】:

  • 我创建了一个新的解决方案,母版页和内容页面它的作品。但它在我的工作项目中不起作用。我在内容页面中使用 iframe,这有什么问题吗?
  • 嗯,您能否粘贴您的母版页和内容页的代码,以便我们了解实际存在的问题。
【解决方案2】:

试试这个调用母版页服务器端函数

    MasterPagename ms = Master as MasterPagename ;
    ms.FuctionOnMasterPage();

如果您尝试在母版页上调用客户端函数,我想您可以直接调用它,因为您的母版页和内容页函数将在同一个 html 页面上呈现。

【讨论】:

  • 我尝试从内容页面按名称调用,但我得到的错误没有找到像这个函数名称这样的函数名称
【解决方案3】:

这里我们可以创建一个Master Page类的对象,然后我们可以调用MasterPage函数

 MasterPageClassName MyMasterPage = (MasterPageClassName)Page.Master;

 MyMasterPage.Functionname();

它一定会帮助你。试试看

【讨论】:

    【解决方案4】:

    我通常这样做:在标记中:

    <asp:Literal ID="ScriptLit" runat="server" />
    


    在后面的代码中:

    ScriptLit.Text = "<script>functionName();</script>"
    

    【讨论】:

      【解决方案5】:

      标签 lbl = (标签)this.Master.FindControl("lblBalance"); lbl.Text = "嗨";

      【讨论】:

      • 这段代码应该放在哪里?它在做什么?其背后的原理是什么?
      • 是的,请解释您回答时使用的任何代码。仅代码答案很少有帮助。
      猜你喜欢
      • 2020-02-29
      • 1970-01-01
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多