【问题标题】:In ASCX-control not doing IF/ELSE condition在 ASCX 控制中不执行 IF/ELSE 条件
【发布时间】:2010-07-20 08:23:56
【问题描述】:

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

错误:数据绑定: 'System.Data.DataRowView' 没有 包含一个名为 SOTName 的属性。

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

下班了。但在 ascx-control 中不是。

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

【问题讨论】:

  • 奇怪的情况:我将断点设置为“if”条件并在这一行收到异常 然后我按下继续按钮 & 我的光标转到我设置的断点 2 行上方。这是什么?! aspx & ascx 的生命周期不同??

标签: asp.net repeater ascx


【解决方案1】:

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

我不认为你应该得到数据。

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

【讨论】:

  • 让我更深入地解释一下:我的数据表包含行(我检查过)。列的差异。如果某些参数“objectType == 1”,那么我会收到一个数据表,而另一个数据表具有不同的列套件。在 aspx-page 中这项工作非常完美! ascx-control 中的相同代码不起作用。是的,如果我的“objectType == 1”,那么我的转发器会收到缺少 SOTName 列的数据表。但是我的条件 为此特别!但这在 ASCX 中不起作用
【解决方案2】:

正如 TheGeekYouNeed 指出的那样,了解中继器的 DataSource 何时定义至关重要,因为控件的事件在页面事件之前处理。

你可以添加类似的代码

<td>GetObjectTypeName='<%# GetObjectTypeName() %>'</td>

确定 if() 条件是否适用于您的数据。

【讨论】:

  • DataSource 和 DataBind 在 Page_Load 部分的代码隐藏中定义。我检查了 - 条件适用于我的数据,但在 DataBinding 之后!但是数据绑定引发异常:(为什么在 ASPX 中没有观察到这个错误?
  • 为什么在 ASCX 数据绑定中比 if/else 条件提早?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 2021-12-21
  • 2015-03-29
  • 1970-01-01
  • 2022-11-14
相关资源
最近更新 更多