<asp:Repeater runat="server" ID="rep" OnItemCreated="rep_ItemCreated">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<td>aaa</td>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
protected void rep_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { if (e.Item.ItemIndex % 4 == 0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text = "<tr>" + li.Text;
}
else if (e.Item.ItemIndex % 4 == 3) {
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text += "</tr>";
}
}
else if (e.Item.ItemType == ListItemType.Footer) {
if (rep.Items.Count % 4!=0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
string oldHTML = li.Text;
string newHTML = String.Empty;
for (int i = rep.Items.Count % 4; i < 4; i++) {
newHTML += "<td></td>";
}
newHTML += "</tr>";
li.Text = newHTML + oldHTML;
}
}
}未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 84: {
行 85: LiteralControl li = e.Item.Controls[0] as LiteralControl;
行 86: li.Text = "<tr>" + li.Text.ToString();;
行 87: }
行 88: else if (e.Item.ItemIndex % 4 == 3)
源文件: e:\asp.net\ggmming\index.aspx.cs 行: 86
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<td>aaa</td>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
protected void rep_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) { if (e.Item.ItemIndex % 4 == 0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text = "<tr>" + li.Text;
}
else if (e.Item.ItemIndex % 4 == 3) {
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text += "</tr>";
}
}
else if (e.Item.ItemType == ListItemType.Footer) {
if (rep.Items.Count % 4!=0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
string oldHTML = li.Text;
string newHTML = String.Empty;
for (int i = rep.Items.Count % 4; i < 4; i++) {
newHTML += "<td></td>";
}
newHTML += "</tr>";
li.Text = newHTML + oldHTML;
}
}
}未将对象引用设置到对象的实例。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误:
行 84: {
行 85: LiteralControl li = e.Item.Controls[0] as LiteralControl;
行 86: li.Text = "<tr>" + li.Text.ToString();;
行 87: }
行 88: else if (e.Item.ItemIndex % 4 == 3)
源文件: e:\asp.net\ggmming\index.aspx.cs 行: 86
2003下也完全正常这是完整的代码
<%@ Page Language="C#" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><script runat="server">
protected void Page_Load(object senderm, EventArgs e) {
string[] lists = new string[10];
this.rep.DataSource = lists;
this.rep.DataBind();
}
protected void rep_ItemCreated(object sender, RepeaterItemEventArgs e)
{
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item)
{ if (e.Item.ItemIndex % 4 == 0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text = "<tr>" + li.Text;
}
else if (e.Item.ItemIndex % 4 == 3)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
li.Text += "</tr>";
}
}
else if (e.Item.ItemType == ListItemType.Footer)
{
if (rep.Items.Count % 4 != 0)
{
LiteralControl li = e.Item.Controls[0] as LiteralControl;
string oldHTML = li.Text;
string newHTML = String.Empty;
for (int i = rep.Items.Count % 4; i < 4; i++)
{
newHTML += "<td></td>";
}
newHTML += "</tr>";
li.Text = newHTML + oldHTML;
}
}
}</script><html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Repeater runat="server" ID="rep" OnItemCreated="rep_ItemCreated">
<HeaderTemplate>
<table>
</HeaderTemplate>
<ItemTemplate>
<td>aaa</td>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
</div>
</form>
</body>
</html>
行 85: LiteralControl li = e.Item.Controls[0] as LiteralControl;
行 86: li.Text = "<tr>" + li.Text.ToString();;
行 87: }
行 88: else if (e.Item.ItemIndex % 4 == 3)你的repeater中itemtemplate的内容中
第一个对象并不是文本内容,可能是其它的服务器控件
比如<ItemTemplate><asp:HyperLink Runat="server">[HyperLink]</asp:HyperLink>literal</ItemTemplate>
不会报错
<ItemTemplate>literal<asp:HyperLink Runat="server">[HyperLink]</asp:HyperLink></ItemTemplate>
就会报这样的错误
行 85: LiteralControl li = e.Item.Controls[0] as LiteralControl;
行 86: li.Text = "<tr>" + li.Text.ToString();;
行 87: }
行 88: else if (e.Item.ItemIndex % 4 == 3)你的repeater中itemtemplate的内容中
第一个对象并不是文本内容,可能是其它的服务器控件
比如<ItemTemplate><asp:HyperLink Runat="server">[HyperLink]</asp:HyperLink>literal</ItemTemplate>
不会报错
<ItemTemplate>literal<asp:HyperLink Runat="server">[HyperLink]</asp:HyperLink></ItemTemplate>
就会报这样的错误