我有一个使用Site.Master的asp页面。
我在Site.Master中放了一个链接,master包含了default.aspx。如何在asp文件中访问链接属性?
Site.Master中的:
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl="~/Register.aspx"
Target="_blank">Register</asp:HyperLink>
答案 0 :(得分:5)
这样做的唯一方法是做一些事情:
HyperLink link = this.Master.FindControl("id_of_the_control_you_are_looking_for") as HyperLink;
但是注意FindControl
不是递归的,所以你需要首先找到包含你要查找的超链接的控件,然后使用id的id在这个容器上做另一个FindControl
。您需要的超链接。
答案 1 :(得分:2)
您需要做的第一件事是将MasterType指令添加到您的内容页面:
<%@ Page Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="Namespace.Default" %>
<%@ MasterType VirtualPath="~/Site.Master" %>
现在,您可以在内容页面中的MasterPage中访问每个 public 项目。
假设您的MasterPage在其代码隐藏中具有此功能:
public partial class Site : System.Web.UI.MasterPage
{
public string Name { get; set; }
}
然后,您可以在内容页面中执行此操作:
public partial class Default
{
public void Page_Load(object sender, EventArgs e)
{
Master.Name = "Bobby";
}
}
我不确定您在问题中使用“链接属性”是什么意思,但如果您的意思是HyperLink,请按以下步骤操作:
public partial class Site : System.Web.UI.MasterPage
{
public HyperLink SharedHyperLink { get { return myHyperLink; } }
}
public partial class Default
{
public void Page_Load(object sender, EventArgs e)
{
Master.SharedHyperLink.NavigateUrl = "/Contact.aspx";
}
}
答案 2 :(得分:1)
假设您在母版页内的某处有一个链接:
<asp:LinkButton ID="mylink" runat="server" Text="OK" CssClass="test" />
然后在子页面的代码后面你可以像这样获取它:
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
var link = FindControlRecursive(Master, "mylink") as LinkButton;
if (link != null)
{
var css = link.CssClass;
// TODO: do something with the link
}
}
private static Control FindControlRecursive(Control control, string id)
{
if (control.ID == id)
{
return control;
}
foreach (Control ctrl in control.Controls)
{
var foundCtrl = FindControlRecursive(ctrl, id);
if (foundCtrl != null)
{
return foundCtrl;
}
}
return null;
}
}