我在FormView中有一个ListView,由于某些奇怪的原因,它既不会触发ItemInsert也不会触发ItemCommand事件。 我正在使用通用列表填充ListView。我将列表绑定到OnPreRenderComplete上的ListView。
<asp:ListView runat="server" ID="lvReferences" DataKeyNames="idReference" OnItemInserting="ContractReferences_Inserting" OnItemDeleting="ContractReferences_Deleting" InsertItemPosition="LastItem" OnItemCommand="ContractReferences_Command" OnItemCreated="ContractReferences_ItemDataBound">
<LayoutTemplate>
<ul>
<asp:PlaceHolder ID="itemPlaceholder" runat="server" />
</ul>
</LayoutTemplate>
<ItemTemplate>
<li class="obsItem">
<a href="#"><asp:TextBox ID="valRef" runat="server" Width="5px" Enabled="false" Text='<%#Bind("idProcessRecordRef") %>' /></a>
<asp:TextBox id="txtRef" runat="server" Text='<%#Bind("description") %>' />
<asp:ImageButton ID="btDelete" runat="server" CommandName="Delete" ImageUrl="~/_layouts/web.commons/Images/eliminar.png" />
</li>
</ItemTemplate>
<InsertItemTemplate>
<li class="obsItem">
<a href="#"><asp:TextBox ID="valRef" runat="server" Width="5px" Enabled="false" /></a>
<asp:TextBox id="txtRef" runat="server" />
<asp:ImageButton ID="btDetail" CausesValidation="false" OnClientClick="javascript:openPopup();return false;" runat="server" ImageUrl="~/_layouts/web.commons/Images/novo.png" />
<asp:ImageButton ID="btSaveDs" runat="server" CommmandName="Insert" CausesValidation="false" ImageUrl="~/_layouts/web.commons/Images/gravarObs.png" />
</li>
</InsertItemTemplate>
</asp:ListView>
我的ItemDataBound方法是:
protected void ContractReferences_ItemDataBound(object sender, ListViewItemEventArgs e)
{
if (!IsPostBack)
{
TextBox valRef = e.Item.FindControl("valRef") as TextBox;
TextBox txtRef = e.Item.FindControl("txtRef") as TextBox;
ScriptManager.RegisterStartupScript(this, this.GetType(), "popup", "function openPopup(){ window.open('ContractPicker.aspx?c1=" + valRef.ClientID + "&c2=" + txtRef.ClientID + "');}", true);
}
}
所以,基本上,在InsertItemTemplate中,我放了一个按钮,打开一个LOV并填充我的valRef和txtRef字段。为了让父页面不回发(我觉得问题就在这里......),我不得不设置“返回false”。 然后,当我使用CommandName =“Insert”单击ImageButton时,它不再触发ItemCommand事件,而是再次在ItemDataBound处理程序中输入。
那么,有什么想法吗?
谢谢!
答案 0 :(得分:1)
好吧,经过几天的搜索,我发现这是一个已知的错误。 http://connect.microsoft.com/VisualStudio/feedback/details/328680/problem-accessing-controls-clientid-on-asp-net-listviews-itemcreated
因此,它与弹出窗口无关,而是与ListView和ItemDataBound本身无关。我把ItemDataBound逻辑放在OnLoad上(使用递归的FindControl),它工作正常。 因此,在ItemDataBound中,我的控件的ClientID是“错误的”。 愚蠢的虫真的......