我有一个ASP.NET列表框lstActivities
。要编辑列表中的项目,用户可以单击lnkButton
或双击列表框。我通过以下方式实现这一目标:
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack) return;
var refDblClick = ClientScript.GetPostBackEventReference(lnkButton, "dblClick");
lstActivities.Attributes.Add("ondblclick", refDblClick);
}
protected override void Render(HtmlTextWriter writer)
{
ClientScript.RegisterForEventValidation(lnkButton.UniqueID, "dblClick");
base.Render(writer);
}
我想改变这一点,以便回发是异步的,使用AJAX。目前,列表框和按钮位于UpdatePanel中,因此单击按钮时会出现异步回发。但是当双击列表框时,会发生完整的回发。
<asp:UpdatePanel ID="up" UpdateMode="Conditional" ChildrenAsTriggers="true"
runat="server">
<ContentTemplate>
<asp:ListBox ID="lstActivities" runat="server"></asp:ListBox>
<asp:LinkButton ID="lnkButton" runat="server" OnClick="lnkButton_Click">
Edit</asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
如何双击只刷新UpdatePanel?
答案 0 :(得分:1)
要尝试的一些事项:
<asp:UpdatePanel ID="up" UpdateMode="Conditional" ChildrenAsTriggers="true"
runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="lstActivities" />
<asp:AsyncPostBackTrigger ControlID="lnkButton" />
</Triggers>
.........
</asp:UpdatePanel>
或
protected void Page_Load(object sender, EventArgs e) {
if (IsPostBack) return;
var refDblClick = ClientScript.GetPostBackEventReference(lnkButton, "dblClick");
lstActivities.Attributes.Add("ondblclick", refDblClick);
ScriptManager1.RegisterAsyncPostBackControl(lstActivities);
}
答案 1 :(得分:1)
我只是使用您提供的代码进行了快速测试,我确实获得了部分回发&#34; (由于缺少一个更好的术语,因为updatepanels总是做完全回发),点击按钮和双击列表。
如果您在使用UpdatePanel&#34; up&#34;时将该页面中的其他面板设置为UpdateMode="Conditional"
,那么只有&#34; up&#34;将会被更新。如果您没有在其他面板上指定更新模式,那么它们将始终在回发时更新,因为再次,更新面板始终执行完全回发;他们真正做的是对页面进行部分刷新。
我认为链接MSDN documentation regarding UpdatePanel非常有用。
答案 2 :(得分:1)
我尝试了建议的解决方案,但没有运气。这是一个非常复杂的页面,有很多UpdatePanel,很难解决确切的问题。
最后我去了jQuery:
$(document).ready(function () {
$(document).delegate('#ctl00_body_lstActivities', 'dblclick', function () {
eval($('#ctl00_body_lnkButton').attr('href'));
});
});