在TextBox中使用Bind在TextBox控件外部呈现绑定数据

时间:2010-07-30 13:17:39

标签: c# asp.net

我有ListView(在更新面板中)绑定到ObjectDataSource(连接到NHibernate对象)和EditItemTemplate我使用

Text='<%# Bind("HideLocation")%>' 

绑定到对象的字符串属性。

当我点击编辑(两次,我有另一个问题)并在Chrome中查看代码时,输​​出如下所示:

<div class="InputLine InputLineLevel2">
    <div class="InputLabel">Hide Location:</div>
    <div class="InputControl">
     "
                        In locker 2317"
        <input 
            name="ctl00$MainContentPlaceholder$ItemDetailsListView$ctrl0$txtItemHideLocation"
            type="text"
            maxlength="128"
            id="ctl00_MainContentPlaceholder_ItemDetailsListView_ctrl0_txtItemHideLocation"
            style="width:300px;">
    </div>
</div>

.aspx代码如下所示:

 <asp:UpdatePanel ID="ItemDetailsUpdatePanel" UpdateMode="Always" runat="server">
    <asp:ListView ID="ItemDetailsListView" runat="server" ...>
         <EditItemTemplate>
             <fieldset class="FieldsetLevel2">
             <legend>Edit Item: <%# Eval("SearchItem.SearchItemName") %></legend>
                 <div class="InputLine InputLineLevel2">
                     <div class="InputLabel">Hide Location:</div>
                     <div class="InputControl">
                         <asp:TextBox ID="txtItemHideLocation" Width="300px"
                             Text='<%# Bind("HideLocation")%>'
                             runat="server"></asp:TextBox>
                     </div>
                 </div>
... a bunch of other controls & end tags

为什么绑定数据的值(在这种情况下:在锁定器2317中)显示在文本框之外而不是作为数据内容的任何想法?

1 个答案:

答案 0 :(得分:0)

嗯,我找到了一个解决方案,这是一个有趣的解决方案。我还在原始问题中提供了虚假信息,这可能会产生重大影响。

我将所有代码都移到了一个单独的项目中,并将其简化为基础知识。我仍然需要两次单击按钮才能刷新,文本仍然在TextBox之外。我最终发现有人描述了一个不同的问题,这让我意识到我没有绑定到对象数据源。我在ListView中绑定了一个控件,但不是listview本身。列表视图绑定到从我的一个数据模型对象返回的ISet。

所以,问题是(显然,我将在下面解释为什么我不相信)当你不使用xDataSource控件时,无论何时更改ListView的状态,都需要数据绑定。我想这个概念也可以移植到其他数据控件,事实上我知道我之前已经遇到过其他DataBound控件。

这次看起来有什么不同,以及为什么我没有马上就知道,因为它几乎奏效了。事件在第一个回发时触发,并设置EditItemIndex。这对显示没有影响(尽管在PreRender事件之前发生)所以我猜它与事件模型和ListView控件的内部工作之间的交互有关。然而,在第二次回发时(再次单击按钮)事件未被触发,但显示已更新(使用来自我的数据源的数据,尽管不是我想要的数据)。

当我在更改EditIndex后将代码修改为数据绑定时,不仅删除了对第二个回发的需要,而且还将数据绑定文本放在TextBox中,而不是之前。