在ASCX控制中没有执行IF / ELSE条件

时间:2010-07-20 08:23:57

标签: asp.net repeater ascx

有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控件中我有一个例外:

  

错误:DataBinding:   'System.Data.DataRowView'没有   包含名为SOTName的属性。

而另一个不符合:在aspx-page中我的行上的断点

  

&lt;%if(GetObjectTypeName()==“Sot”)

正在努力。但是在ascx-control NOT中。

请帮忙!为什么行为如此不同?怎么样?

2 个答案:

答案 0 :(得分:0)

检查数据的实际行数,即行数?我敢打赌你的DataSource是空的。

我认为你不应该在你认为自己应该获得数据时获得数据。

用户控件的Page Load事件将在aspx页面加载之前执行。如果你在.aspx的Page Load中的.ascx中获得了某种类型的查询参数,你应该在.aspx的Page_Init中获取它。

答案 1 :(得分:0)

正如TheGeekYouNeed指出的那样,知道何时定义Repeater的DataSource至关重要,因为控件的事件在页面事件之前被处理。

您可以添加

等代码
<td>GetObjectTypeName='<%# GetObjectTypeName() %>'</td>

查明if()条件是否适用于您的数据。