在主页中包含的用户控件中引用Literal时遇到一些问题。我正在使用以下页面进行测试(可能包含的路径不必要......):
~/_inc/header.ascx
~/master_pages/partner_header_footer.master
~/credit_check/test_page.aspx
header.ascx (相关内容)
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="header.ascx.cs" Inherits="_inc_header" %>
<link type="text/css" rel="stylesheet" href="/css/header.css" />
<div id="header" class="content-header cf">
<div id="logo"></div><asp:Literal id="contentTitle" runat="server" Text="Customer Service" />
</div>
partner_header_footer.master (相关内容)
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="partner_header_footer.master.cs" Inherits="master_pages_partner" %>
<%@ Register Src="~/_inc/header.ascx" TagPrefix="uc1" TagName="header" %>
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" />
<title>Wireless</title>
</head>
<body>
<form id="form1" runat="server">
<uc1:header runat="server" ID="header" />
<asp:ContentPlaceHolder id="Wireless" runat="server">
</asp:ContentPlaceHolder>
</form>
</body></html>
test_page.cs (相关内容)
protected void Page_Load(object sender, EventArgs e)
{
Literal mpLiteral = (Literal)Master.FindControl("contentTitle");
if (mpLiteral != null)
{
mpLiteral.Text = "Customer Service Home";
}
}
不确定我做错了什么,所以希望有人可以指出我的方式的错误......
答案 0 :(得分:1)
由于Literal位于母版页内的UserControl中,因此Master FindControl
将无法找到它。
如果您想让UC的Literal可供Master使用,请在UC的代码隐藏中创建一个属性:
public string MyLiteral { get{ return contentTitle.Text; } set{ contentTitle.Text = value; } }
然后,在您的母版页中,您可以访问header.MyLiteral
来设置/获取值。
现在,如果您想让子页面可以访问它,那么您将再次将其作为属性公开,但这次是在Master的代码隐藏中:
public string HeaderLiteral { get{ return header.MyLiteral; } set{ header.MyLiteral = value; } }
最后,在子页面中,您需要根据您的MP标记将this.Master
投射到母版页的类型(我认为它是master_pages_partner
):
var castedMaster = (master_pages_partner)this.Master;
if(null != castedMaster)
{
castedMaster.HeaderLiteral = "Customer Service Home";
}