Asp.net 为什么我的中继器总是在Eval(NULL)值上崩溃?
我无法理解,但一旦它遇到一些空数据,它就会拒绝继续绘制下一个元素。如果我不得不猜测,我会说您的isCompleted函数不会处理空值。这是一个猜测,因为您的示例中没有列出该函数。您需要提供堆栈跟踪以确保 但我可以看到几个问题:Asp.net 为什么我的中继器总是在Eval(NULL)值上崩溃?,asp.net,null,repeater,Asp.net,Null,Repeater,我无法理解,但一旦它遇到一些空数据,它就会拒绝继续绘制下一个元素。如果我不得不猜测,我会说您的isCompleted函数不会处理空值。这是一个猜测,因为您的示例中没有列出该函数。您需要提供堆栈跟踪以确保 但我可以看到几个问题: DIV#0格式百分比内的错误 空错误 示例解 (System.Convert.ToInt32应将DBNull/NULL转换为0) 或者将isCompleted更改为接受对象参数,并在函数内部执行NULL/DBNull检查。在稍微不同的方法中,可能会有帮助的是在代码中进行计
或者将isCompleted更改为接受对象参数,并在函数内部执行NULL/DBNull检查。在稍微不同的方法中,可能会有帮助的是在代码中进行计算,而不是在标记中内联。只是更容易检查空值等。我几乎总是在标记中使用除简单Eval()之外的任何东西
<asp:Repeater ID="rptLessons" runat="server">
<ItemTemplate>
<tr>
<td><%#Eval("fullname")%></td>
<td><%#isCompleted(Eval("totallessons"), Eval("completedlessons"), Eval("totalNumAvail"), Eval("totalNumCorrect"))%></td>
<td><%#FormatPercent(Eval("totalnumcorrect") / Eval("totalNumAvail"))%> <%-- (<%#Eval("totalnumcorrect")%> / <%#Eval("totalNumAvail")%>) --%></td>
<td><%#FormatPercent(Eval("completedlessons") / Eval("totallessons"))%> <%-- (<%#Eval("completedlessons")%> / <%#Eval("totallessons")%>) --%></td>
<td><%#Eval("lastaccessed")%></td>
</tr>
</ItemTemplate>
</asp:Repeater>
受保护的字符串GetCorrectPercent()
{
如果(Eval(“totalnumcorrect”)==null | | Eval(“totalNumAvail”)==null)
返回“不适用”;
return((int)Eval(“totalnumcorrect”)/(int)Eval(“totalNumAvail”)).ToString();
}
不确定这里的所有格式是否正确,但这应该会让您朝着不同的方向前进。只要调用方当前正在执行DataBind(),Eval()将在被调用的方法中工作。我更倾向于显式。请原谅代码中的任何小错误,我无法测试它 如果在标记中,您将这些eval替换为文字,那么在代码隐藏中: 如果您有MyClass的集合 在页面的init事件中
<td>
<%#GetCorrectPercent()%>
</td>
protected string GetCorrectPercent()
{
if(Eval("totalnumcorrect") == null || Eval("totalNumAvail") == null)
return "n/a";
return ((int)Eval("totalnumcorrect") / (int)Eval("totalNumAvail")).ToString();
}
在负载中或您选择的任何位置
this.rptLessons.OnItemDataBound += rptLessons_DataBound...
然后在那个itemdatabound事件中
this.rptLessons.DataSource = CollectionOfMyClass;
this.rptLessons.DataBind();
通过这种方式,您可以以比使用eval更可控的方式处理空值等问题。man我对这一点很有希望,但它仍然没有绘制,它绘制了包含空值的数据行的名字,但没有绘制其他数据行,并且在这一行之后也没有绘制更多的中继器……打开跟踪,看看结果如何报告的异常为。zyou可能在isCompleted内部失败(例如在DIV#0上),而不是现在的空引用问题。后面的代码是否能够看到Eval(“totalnumcorrect”)或我是否必须将其传递过来,我不明白它将如何看到…将工作,但只有在DataBind()操作期间调用GetCorrectPercent()方法时才会工作。在DataBind()之外调用它将导致异常。Ryan,请注意,这种方法不会直接解决您的问题,但是检查空值和用户使用的更复杂的逻辑(标记中包含所有格式)要容易得多你说它崩溃了,但确切的错误是什么?我看不到任何错误。它只是无法完成填充其余的数据。使用ASP.NET数据绑定周围的HTML注释并不能阻止数据绑定的发生。它只是将结果放入呈现页面的HTML注释中。你需要移除它。
MyClass myClass = (MyClass)ri.DataItem;
Literal litFullname = FindControl(ri, "litFullName");
litFullName.Text = myClass.Fullname;