c# - 在 TextBox 中使用 Bind 在 TextBox 控件外呈现绑定(bind)数据

标签 c# asp.net

我有一个 ListView(在更新面板中)绑定(bind)到一个 ObjectDataSource(连接到一个 NHibernate 对象)并且在 EditItemTemplate 我使用

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

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

当我点击编辑(两次,我遇到的另一个问题)并在 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

为什么绑定(bind)数据的值(在本例中:在储物柜 2317 中)显示在文本框之外而不是作为数据的内容?有什么想法吗?

最佳答案

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

我将我所有的代码都移到了一个单独的项目中,并将其缩减为仅包含基础部分。我仍然必须单击按钮两次才能刷新,并且文本仍在 TextBox 之外。我最终发现有人描述了一个不同的问题,这让我意识到我没有绑定(bind)到对象数据源。我在 ListView 中绑定(bind)了一个控件,而不是 listview 本身。 ListView 绑定(bind)到从我的数据模型对象之一返回的 ISet。

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

这次似乎有所不同,我之所以没有立即了解,是因为它几乎奏效了。该事件在第一次回发时触发,并设置了 EditItemIndex。这对显示没有影响(尽管发生在 PreRender 事件之前)所以我猜它与事件模型和 ListView 控件的内部工作之间的交互有关。然而,在第二次回发时(再次单击按钮)事件没有被触发,但显示已更新(使用我的数据源中的数据,尽管不是我想要的位置)。

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

关于c# - 在 TextBox 中使用 Bind 在 TextBox 控件外呈现绑定(bind)数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3371779/

相关文章:

c# - 本地日期时间存储在 MongoDb 中,同时从 C# 发送 UTC 日期时间

javascript - 在window.onload中调用函数不起作用

c# - 如何在 Firefox 中打印 RDLC 报告

c# - 注册 SecurityTokenReceived 事件处理程序

c# - 找不到 Visual Studio 2015 上的 ASP.NET 5 addMvc 方法

asp.net - UserPrincipal.FindByIdentity 在 IIS 服务器上返回 null

c# - ASP.NET Core RC2 中的依赖注入(inject)失败

c# - ASHX 呈现为损坏的图像

c# - 在配置依赖注入(inject)之后但在第一个 http 请求之前初始化单例

c# - 在 DataGridView 中使用自定义控件