C# 用户控件内部的控件don';如果它';在中继器里有什么
我有一种情况,我在一个页面上的两个位置使用一些标记,其中一个在转发器中。中继器中的一个未初始化其子控件;他们保持沉默 Default.aspx:C# 用户控件内部的控件don';如果它';在中继器里有什么,c#,asp.net,.net,C#,Asp.net,.net,我有一种情况,我在一个页面上的两个位置使用一些标记,其中一个在转发器中。中继器中的一个未初始化其子控件;他们保持沉默 Default.aspx: <%@ Page Title="Home Page" Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="nestedcontroltest._Default" %> <%@ Register TagPrefix="a" Nam
<%@ Page Title="Home Page" Language="C#" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="nestedcontroltest._Default" %>
<%@ Register TagPrefix="a" Namespace="nestedcontroltest" Assembly="nestedcontroltest" %>
<html>
<head>
<title>test</title>
</head>
<body>
<asp:Repeater runat="server" ID="rptLetters" OnItemDataBound="rptLetters_ItemDataBound">
<ItemTemplate>
<a:MyControl runat="server" ID="ctrlMyControl"/>
</ItemTemplate>
</asp:Repeater>
</body>
</html>
MyControl.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="MyControl.ascx.cs" Inherits="nestedcontroltest.MyControl" %>
<asp:Panel runat="server" ID="pnlContent">
<asp:Literal runat="server" ID="ltlText"/>
</asp:Panel>
当我尝试加载它时,我得到“对象引用未设置为对象的实例”-显然ltlText为null
如何使我的UserControl正确初始化?由于您没有在标记中添加绑定或求值表达式,可能是e.Item.DataItem为null,而不是ltlText 调试器说了什么?找到了答案:
<%@ Register TagPrefix="a" Namespace="nestedcontroltest" Assembly="nestedcontroltest" %>
需要改成
<%@ Register TagPrefix="a" TagName="MyControl" Src="~/MyControl.ascx" %>
然后控件被正确初始化,即使它在中继器中。可能是ASP.net中的错误,或者我需要使用完整的程序集名称?不管怎样,谢谢大家的帮助。如果调试器出现在
ltlText.Text
上,那么肯定会初始化控件,但是ltlText
没有初始化。所以,我想问题出在你的用户控件上。用户控件没有像Page\u Load
这样的方法,但只有OnLoad(EventArgs e)
方法,所以要注意在控件中使用Page方法,有时很难调试为什么某些控件为null。你注册了对用户控件的引用吗,比如:?嗨,伙计们,我已经更新了Default.aspx,加入了@Register
指令。谢谢yogi,你说得对,中继器是个麻烦。原来问题出在我的@Register
指令中;按名称空间和程序集注册似乎不会导致初始化控件,但按名称注册控件是有效的。现在看看我是否能回答我自己的问题..不,调试器说e.Item.DataItem是“a”,然后是“b”,然后是“c”,就像你所期望的那样。异常肯定在ltlText.Text=Text行上代码>和ltlText绝对为空。我永远不会忘记这一点!谢谢你,克里斯!
<%@ Register TagPrefix="a" Namespace="nestedcontroltest" Assembly="nestedcontroltest" %>
<%@ Register TagPrefix="a" TagName="MyControl" Src="~/MyControl.ascx" %>