ASP / C#,将文本添加到文本框问题

时间:2011-03-03 17:51:47

标签: c# asp.net textbox label

出于某种原因,我无法将文本放入任何文本框或标签中!

我正在使用母版页,代码将进入代码隐藏视图。我创建了文本框:

<asp:Textbox ID="whatever" runat="Server">

当我想添加一些文本时,我只需在代码后面添加代码,如:

whatever.Text = "myText";

我收到错误消息:

"System.NullReferenceException:Object reference not set to an instance of an object"

用红色高亮显示这一行:whatever.Text =“myText”;

我猜是因为它说它不在那里,但它怎么能让我引用文本框?

道歉,如果答案在网站上,我搜索但没有发现任何内容。 :)

这是我在Basket.asp中的代码 - 我已经将文本框更改为标签,它被称为bskItems

<asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder3" runat="server"> <asp:Label ID="bskItems" runat="server"></asp:Label> <div id="cart"> <asp:Button ID="btnCheckout" CssClass="BasketBtnAdd" runat="server" CommandName="checkout" Text="Checkout" /> </div> </asp:Content>

这是我的主页,我正在使用loginView。 ContentPlaceHolder3是文本框的位置。我只希望它显示项目数。

<asp:LoginView ID="loginView" runat="server">
    <LoggedInTemplate>
    <asp:LoginName ID="loginName" runat="server" FormatString="Hi, {0}!"/>
    (<asp:LoginStatus ID="loginStatus" runat="server" />)
    <% 
    if (HttpContext.Current.User.IsInRole("Admin"))
    { 
    %>
    <asp:SiteMapDataSource ID="admin" SiteMapProvider="admin" runat="server" ShowStartingNode="false" />
    <asp:Menu ID="Menu" runat="server" DataSourceID="admin">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>
    <%
    }
    if (HttpContext.Current.User.IsInRole("Users"))
    { 
    %>
    <asp:SiteMapDataSource ID="user" runat="server" SiteMapProvider="user" ShowStartingNode="false" />
    <asp:Menu ID="Menu1" runat="server" DataSourceID="user">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>

    <%
    }
    %>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder2" runat="server"></asp:ContentPlaceHolder>
    <asp:ContentPlaceHolder ID="ContentPlaceHolder3" runat="server"></asp:ContentPlaceHolder>
    </LoggedInTemplate>
    <AnonymousTemplate>
        <asp:LoginStatus ID="loginStatus" runat="server" />
        <asp:SiteMapDataSource ID="anon" runat="server" SiteMapProvider="anon" ShowStartingNode="false" />
        <asp:Menu ID="Menu2" runat="server" DataSourceID="anon">
        <StaticItemTemplate>
            <%# Eval("Text") %>
        </StaticItemTemplate>        
    </asp:Menu>
    </AnonymousTemplate>

</asp:LoginView>

5 个答案:

答案 0 :(得分:1)

除了其他答案之外,如果您在Page.OnLoad中设置了值,请记住尚未创建母版页面控件。

以下是事件发生顺序的完整布局:Complete Lifecycle of an ASP Page

答案 1 :(得分:1)

我通常做的是将控件显示为我的MasterPage的属性。

在母版页(AMasterPage.master)上:

public TextBox MyTextBox { get { return this.theTextBoxControl; } }

那么,在使用这个masterPage(APage.aspx)的孩子身上:

((AMasterPage)this.Master).MyTextBox.Text = "myText";

答案 2 :(得分:0)

在Content Place Holder文件中从Code-Behind访问母版页成员时,我认为您需要这样做:

this.Master.whatever.Text = "new Text";

在MSDN上的ASP.NET Master Pages上查看此链接。

答案 3 :(得分:0)

您需要在母版页上获取对文本框的引用,然后设置文本

TextBox tb = Master.Page.FindControl("whatever") as TextBox;

if(tb != null)
{
    tb.Text = "myText";

}

答案 4 :(得分:0)

将文本框上的ClientIDMode设置为“Static”。呈现页面时,它会将TextBox的ID分配给随机的内容。通过将ClientIDMode更改为“Static”,您应该能够引用ID,因为ID将保持不变并且不会更改。

或尝试添加OnDataBinding事件处理程序并将“sender”转换为(TextBox)。例如:

protected void TextBox_OnDataBinding(object sender, EventArgs e)
{
     var txt = (TextBox)sender;
     txt.Text = "Something";
}

这应该直接与控件对话。