在ASP.NET中如何从内容页调用母版页的函数?

4

我有一个位于主页面上的函数,我想从代码后台调用它来自内容页面。

这是我的尝试:

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

"setStatusBarMessage"函数在母版页中声明,所以这段代码无法工作。

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 对象下。


这是客户端函数还是? - levi
我认为如果客户端已经有这些函数,就没有必要显式地将它们包含进来,它们应该已经在内容页面上了。 - Ram Singh
编辑过的,这是一个客户端函数。 - Mennan
我认为你需要调用RegisterStartupScript而不是RegisterClientScriptBlock。请参考raman的答案。 - M4N
@Mennan 如果我们的答案解决了您的问题,请接受它…… - Ram Singh
5个回答

5

好的,请尝试以下代码

我有一个在主页面中的函数,它是:

<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,这会有任何问题吗? - Mennan
你能否粘贴你的母版页和内容页的代码,以便我们了解实际问题所在? - Ram Singh

2
尝试使用以下代码调用母版页服务器端函数:

尝试使用以下代码调用母版页服务器端函数

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

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

我试图从内容页按名称调用函数,但是出现了错误,提示找不到这个函数名。 - Mennan

0
通常我这样做:在标记中使用:
<asp:Literal ID="ScriptLit" runat="server" />


在代码后台:

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

0

在这里我们可以创建一个主页面类的对象,然后调用MasterPage函数。

 MasterPageClassName MyMasterPage = (MasterPageClassName)Page.Master;

 MyMasterPage.Functionname();

它肯定会帮助你。试试吧。


-2

Label lbl = (Label)this.Master.FindControl("lblBalance"); lbl.Text = "你好";


这段代码应该放在哪里?它在做什么?背后的原理是什么? - rayryeng
是的,请在回答中解释任何代码。仅靠代码回答很少有帮助。 - indivisible

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接