2010-07-30 50 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中而不是之前。