无法从内容页面访问母版页的<input type =“button”/>

时间:2015-06-01 20:37:24

标签: c# html asp.net

我有一个

&#13;
&#13;
<input type="button" id="Button1">
&#13;
&#13;
&#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;。 我尝试将值更改为headContentHolder1,并且这些值可以完美运行。

有人可以帮助我吗?

3 个答案:

答案 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属性中获取实际呈现的名称。