出于某种原因,我无法将文本放入任何文本框或标签中!
我正在使用母版页,代码将进入代码隐藏视图。我创建了文本框:
<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>
答案 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";
}
这应该直接与控件对话。