2010-07-30 25 views
3

我有一个ListView(在一个更新面板)结合到ObjectDataSource(连接到一个NHibernate的对象),并在EditItemTemplate我使用在文本框使用绑定呈现TextBox控件外绑定数据

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 

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

+0

没有updatepanel,你有同样的问题吗? – onof 2010-07-30 13:34:44

+0

是的。我拿出了更新面板,仍然有文本框问题和双击问题。我将把代码的这一部分移动到一个新页面,并尽可能多地删除,以查看行为是否发生变化...... – Kendrick 2010-07-30 13:54:59

+0

将所有内容全部清除不起作用。我正在将页面移到一个全新的项目中(这非常痛苦)并且横过我的手指。 – Kendrick 2010-07-30 19:33:35

回答

0

嗯,我找到了一个解决方案,这是一个有趣的。我还在我原来的问题中提供了虚假信息,这可能会造成所有不同。

我把我所有的代码都移到了一个单独的项目中,并将其简化为基础。我仍然需要点击两次按钮才能刷新,而文本仍然在TextBox之外。我最终发现有人描述了一个不同的问题,这让我意识到我没有绑定到对象数据源。我在ListView中绑定了一个控件,但不是ListView本身。 listview被绑定到从我的一个数据模型对象返回的ISet。因此,问题是(显然,我将解释为什么我不相信下面),当你不使用xDataSource控件时,只要你改变ListView的状态就需要绑定数据。我想这个概念也可以用于其他数据控件,事实上我知道我之前用其他DataBound控件碰到过它。

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

当我在更改EditIndex后将我的代码修改为数据绑定时,它不仅不需要第二次回发,而是将数据绑定文本放置在TextBox中而不是之前。