在 ASCX 控制中不执行 IF/ELSE 条件
ASCX 控制程序加载到页面上。 在Repeater控件中,根据不同的条件显示不同的COLUMNS集合,并且DataTable具有不同的列集合。
所以,在 ASPX 页面上,这个构建工作很好。
<ItemTemplate>
<tr class="objectrow" href="<%# GetCompleteViewObjectLink(Convert.ToInt32(Eval("ID_Object")))%>">
<td align="center" class="c1">
<%# Eval("ID_Object") %>
</td>
<% if (GetObjectTypeName() == "Sot")
{ %>
<td align="center" class="c6">
<%# Eval("SOTName") != DBNull.Value ? Eval("SOTName") : ""%>
</td>
<% } %>
............................
但在程序加载到页面 ASCX-control 中我有一个异常:
错误:数据绑定: “System.Data.DataRowView”没有 包含一个名为 SOTName 的属性。
另一个不符合:在 aspx-page 中我的断点在行上
<% if (GetObjectTypeName() == "Sot")
已完成。但在 ascx-control 中则不然。
请帮忙!为什么行为如此不同?怎么样?
There ASCX-controls that the program-loaded onto the page.
In a Repeater control in which, depending on the conditions displayed a different set of COLUMNS and DataTable with a different set of columns.
So, on the ASPX-page, this construction work Good.
<ItemTemplate>
<tr class="objectrow" href="<%# GetCompleteViewObjectLink(Convert.ToInt32(Eval("ID_Object")))%>">
<td align="center" class="c1">
<%# Eval("ID_Object") %>
</td>
<% if (GetObjectTypeName() == "Sot")
{ %>
<td align="center" class="c6">
<%# Eval("SOTName") != DBNull.Value ? Eval("SOTName") : ""%>
</td>
<% } %>
............................
But in program-loaded to page ASCX-control I have an Exception:
Error: DataBinding:
'System.Data.DataRowView' does not
contain a property named SOTName.
and another does not conform: in aspx-page my breakpoint on row
<% if (GetObjectTypeName() == "Sot")
was work off. But in ascx-control NOT.
Please, help! Why behaviour is so different? How to be?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
检查数据的实际行数,即行数?我敢打赌你的数据源是空的。
我认为你没有在你认为应该获取数据的时候获取数据。
用户控件的页面加载事件将在 aspx 页面加载之前执行。如果您在 .aspx 的页面加载中的 .ascx 中获取某种类型的查询参数,则应该在 .aspx 的 Page_Init 中获取该参数。
Check your data for actual rows, i.e. row count? I would bet your DataSource is null.
I don't think you're getting data when you think you should be.
The Page Load event of the user control will execute before the aspx Page Load. If you are getting some type of parameter for your query in the .ascx in the Page Load of the .aspx, you ought to grab that in the Page_Init of the .aspx.
正如 TheGeekYouNeed 指出的那样,了解 Repeater 的 DataSource 何时定义至关重要,因为控件的事件在页面事件之前处理。
您可以添加代码来
查明 if() 条件是否适用于您的数据。
As TheGeekYouNeed points out, it's crucial to know when the DataSource of the Repeater is defined, as the control's events are processed before the page events.
You can add code like
to find out whether the if() condition applies for your data.