我在UpdatePanel的ListView中有一个LinkButton。我希望按钮(好吧,其中任何一个)导致部分回发,但它们会导致整页回发。
<asp:UpdatePanel ID="upOutcomes" UpdateMode="Conditional" runat="server">
<ContentTemplate>
<asp:ListView ID="lvTargets" runat="server" onitemdatabound="lvTargets_ItemDataBound">
<ItemTemplate>
<asp:LinkButton ID="lnkAddTarget" CssClass="lo" Text='<%# Eval("Title") + " <b>" + Eval("Level") + Eval("SubLevel") + "</b>" %>' runat="server"></asp:LinkButton>
</ItemTemplate>
</asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
我在stackoverflow上发现了另一篇帖子,建议添加:
protected void lvTargets_ItemDataBound(object sender, ListViewItemEventArgs e) {
var lb = e.Item.FindControl("lnkAddTarget") as LinkButton;
tsm.RegisterAsyncPostBackControl(lb); // ToolkitScriptManager
}
它没有什么区别......
还有一些其他类似的帖子,但我找不到解决方案!有什么想法吗?
答案 0 :(得分:38)
ASP.NET 4中的ClientIDMode设置允许您指定ASP.NET如何为HTML元素生成id属性。
在以前的ASP.NET版本(即pre 4)中,默认行为等同于ClientIDMode的AutoID设置。但是,默认设置现在是 Predictable 。
由于脚本管理器希望在以前版本的.NET中生成HTML控件的方式,因此需要AutoId。
答案 1 :(得分:1)
我通过在适用页面的页面指令上设置ClientIDMode="AutoID"
来解决了这个问题,
<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>
这很好。
答案 2 :(得分:0)
尝试将CommandName
,CommandArgument
属性和OnCommand
事件处理程序添加到您的链接按钮中,如下所示:
<asp:LinkButton CommandName='test' CommandArgument='<%# Eval("Title") %>' ID="lnkAddTarget" runat="server" OnCommand="LinkButtonCommandEventHandler" />
或者 - 将OnItemCommand
处理程序添加到整个ListView。
答案 3 :(得分:0)
我通过在适用页面的页面指令上设置:ClientIDMode =“AutoID”来解决此问题,如下所示:<%@ Page Title="" ClientIDMode="AutoID" Language="C#"%>
,从而解决了我之前在ListView中使用ASP链接按钮导致完整回发的问题
但是,这可能要求客户端代码(Jquery,Javascript)上的任何ASP控件都以它的全名引用,因为它出现在浏览器源代码中(我在Firefox中使用Firebug来获取名称)。例如,这个Jquery函数$("#ContentPlaceHolder1_btnCancelReferCustomer").click(function () {
$("#divRefer").hide({ effect: "slide", duration: 200 });
return false;
});
更改为此(请注意选择器中的asp按钮名称更改):
$("#ctl00_ContentPlaceHolder1_btnCancelReferCustomer").click(function () {
$("#divRefer").hide({ effect: "slide", duration: 200 });
return false;
});
答案 4 :(得分:0)
我通过在适用页面的页面指令上设置:ClientIDMode =“AutoID”来解决此问题,如下所示:&lt;%@ Page Title =“”ClientIDMode =“AutoID”Language =“C#”%&gt;