我有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中)显示在文本框之外而不是作为数据内容的任何想法?
答案 0 :(得分:0)
嗯,我找到了一个解决方案,这是一个有趣的解决方案。我还在原始问题中提供了虚假信息,这可能会产生重大影响。
我将所有代码都移到了一个单独的项目中,并将其简化为基础知识。我仍然需要两次单击按钮才能刷新,文本仍然在TextBox之外。我最终发现有人描述了一个不同的问题,这让我意识到我没有绑定到对象数据源。我在ListView中绑定了一个控件,但不是listview本身。列表视图绑定到从我的一个数据模型对象返回的ISet。
所以,问题是(显然,我将在下面解释为什么我不相信)当你不使用xDataSource控件时,无论何时更改ListView的状态,都需要数据绑定。我想这个概念也可以移植到其他数据控件,事实上我知道我之前已经遇到过其他DataBound控件。
这次看起来有什么不同,以及为什么我没有马上就知道,因为它几乎奏效了。事件在第一个回发时触发,并设置EditItemIndex。这对显示没有影响(尽管在PreRender事件之前发生)所以我猜它与事件模型和ListView控件的内部工作之间的交互有关。然而,在第二次回发时(再次单击按钮)事件未被触发,但显示已更新(使用来自我的数据源的数据,尽管不是我想要的数据)。
当我在更改EditIndex后将代码修改为数据绑定时,不仅删除了对第二个回发的需要,而且还将数据绑定文本放在TextBox中,而不是之前。