我有一个
<input type="button" id="Button1">
&#13;
Master1.master
主页中。 (位于<div>
)。
我还有一个内容页面Main.aspx
。
我想在我访问内容页面true
时将按钮的可见性设置为Main.aspx
,例如,从另一个页面。 (我有一个Login.aspx
页面,在我插入user / psw并按下一个按钮后,我将其重定向到Main.aspx
)。
我添加了指令<%@ MasterType virtualpath="~/Master1.master" %>
我正在使用以下代码
Button home = new Button();
home = (Button)Master.FindControl("Button1");
home.Visible = false;
但是当我尝试运行时,我得到NullReferenceException
。
所以基本上我无法看到&#34; Button1&#34;。
我尝试将值更改为head
或ContentHolder1
,并且这些值可以完美运行。
有人可以帮助我吗?
答案 0 :(得分:3)
您无法访问非服务器端控件的输入:
你需要:
<input type="button" id="Button1" runat="server">
答案 1 :(得分:2)
您需要添加runat
属性:
<input type="button" id="Button1" runat="server">
答案 2 :(得分:1)
让母版页公开一个属性,然后您可以使用该属性来引用Button
。在渲染事件期间将更改控件的ID;这就是为什么你找不到它。使用母版页上的属性,您可以通过访问Page.Master
变量来解决控件问题。您需要将其强制转换为母版页面类,以便您可以使用IntelliSense访问公共和朋友的方法/属性。这是一些代码...对不起,它在VB中。
这是主页HTML。
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" 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">
<div>
<input type="button" id="button1" runat="server" />
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
</form>
</body>
</html>
这是代码隐藏的母版页。
Partial Class MasterPage
Inherits System.Web.UI.MasterPage
Public ReadOnly Property Button As Control
Get
Return button1
End Get
End Property
End Class
这是内容页面。
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
CType(Page.Master, MasterPage).Button.Text = "My Text"
End Sub
End Class
注意下面呈现的控件名称;它们不是你所期望的。您可以从UniqueID属性中获取实际呈现的名称。