【发布时间】:2011-07-14 14:21:37
【问题描述】:
场景如下:
我在一个名为 updPanel 的 UpdatePanel 中有一个中继器。
在这个中继器内我有两个按钮,它们会触发一个 ItemCommand。
在页面加载中我有这个方法:
if (!IsPostBack)
{
Bind();
}
然后,在 Bind() 上:
public void Bind()
{
rptList.DataSource = Model.GetData(Version);
rptList.DataBind();
}
然后,在 ItemCommand 事件上:
public void rptList_ItemCommand(object source, RepeaterCommandEventArgs e)
{
//Some code to get info about the DataItems
if (e.CommandName.Equals("MyCommandName1"))
{
//Do Stuff
}
else if (e.CommandName.Equals("MyCommandName2"))
{
//Do Other Stuff
}
Bind();
}
我有一个按钮(在同一个更新面板内,但在中继器之外)除了 Bind() 之外什么都不做。
当我单击 ItemCommand 时,该命令会执行,但屏幕不会更新(其中一个项目按钮应在单击后更改其图标)。如果我刷新页面,或者单击“绑定”按钮,中继器会按预期显示数据。
为什么在ItemCommand之后没有绑定?
提前致谢!
编辑:我的中继器:
<asp:Repeater ID="rptList" runat="server">
<HeaderTemplate>
<h3>
<b class="rollback">Rollback</b> | <b class="emteste">Em Teste</b> | <b class="aindanaoincluido">
Ainda não Incluído</b> | <b class="parcialmenteok">Atividade Parcialmente OK</b>
| <b class="todosok">Atividade OK em Todas as Lojas</b> | <b class="publicado">Atividade
Publicada</b>
</h3>
</HeaderTemplate>
<ItemTemplate>
<div class="item" style="display: inline-block">
<p style="font-size: 12px">
<asp:ImageButton ToolTip="Marcar como Rollback" ImageUrl="/_layouts/Extensions/Versioning/img/rollback.png"
CommandName="MarkAsRollback" ID="btnItemRollback" CssClass="itembutton" runat="server" />
<asp:ImageButton ToolTip="Esta atividade possui código. Clique para sinalizar como apenas procedure/config"
ImageUrl="/_layouts/Extensions/Versioning/img/code.png" CommandName="MarkAsProc"
ID="btnItemProc" CssClass="itembutton" runat="server" />
<asp:Image ToolTip="Esta atividade não possui scripts de banco/zips." ImageUrl="/_layouts/Extensions/Versioning/img/noscript.png"
runat="server" CssClass="itembutton" ID="btnItemScript" />
<asp:Label ID="labelWI" Text="" runat="server"></asp:Label>
<span style="color: #4A82CB">
<%# DataBinder.Eval(Container.DataItem, "SystemAssignedTo") %>
- </span><span style="color: Navy">
<%# DataBinder.Eval(Container.DataItem, "SystemTitle") %>
</span>
<asp:HiddenField ID="workItemID" runat="server" />
</p>
</div>
<hr class="item" noshade style="color: #4CBDCB; height: 2px; background-color: #4CBDCB" />
</ItemTemplate>
</asp:Repeater>
编辑:为了简化,这是我得到的行为:
点击中继器外的按钮:图标发生变化。数据库更新。
单击中继器中项目内的按钮:图标不会改变。数据库更新。
再次单击转发器中项目内的按钮:图标更改。数据库更新。但是现在对应的项是错误的,因为我已经再次更改了标志
这似乎与事情发生的顺序有关。
编辑:我忘了说,我用完整的回发进行了测试,一切正常。
【问题讨论】:
-
您能否向我们展示您使用 Updatepanel 设计的 Repater?
-
作为一个友好的建议,远离更新面板。在页面方法旁边使用 jQuery ajax :)
-
您没有添加 AJAX Updatepanle 信息。您不需要添加完整的中继器,但您可以添加有问题的必要 if 规范,以帮助我们找出问题。
-
哦,真的。但是 ajax UpdatePanel 并没有什么特别之处。它的 ContentTemplate 有一个按钮和这个中继器。
<asp:UpdatePanel ID="updPanel" runat="server">
标签: asp.net updatepanel repeater itemcommand