我有一个填充数据的列表视图。此列表视图位于名为Preferences.aspx的页面内的用户控件内。今天我在每行处理点击事件,这意味着涉及回发到服务器。
现在,我必须在Preferences.aspx上放置另一个用户控件,因为还有一组需要单独向用户显示的设置。我在页面的单独选项卡中添加了新的用户控件。这个新标签必须是用户登陆Preferences.aspx时显示的第一个标签。
现在的问题是当用户转到第二个标签(带有列表视图的用户控件)并单击一行时,会发生回发。这会将用户置于第一个选项卡(新添加的用户控件)上。
所以我想知道如何在不必回发的情况下获得一行的点击事件?
欢迎提出任何想法或建议。我在使用C#在Asp.Net工作。
代码是:
用户控件内的标记:
<asp:TableRow runat="server" id="trVisitor" CssClass='<%# GetRowClass() %>' >
<asp:TableCell ID="tdPicture" runat="server" Width="10" onclick='<%# GetClickPostBack(Container.ItemIndex) %>'>
<div style="margin-top:1px;">
<asp:Image ImageUrl=' <%# Page.ResolveUrl("~/" + Eval("Visitor.StatusImageUrl")) %>' visible='<%# historyFlag ? false : true %>' runat="server"/>
</div>
</asp:TableCell>
......等等
Preferences.aspx中的标记:
<ABC:ListControl runat="server" ID="visitorListControl" CanSelect="true" IsMine="true" Recurring="false" OnVisitorSelected="ListControl_VisitorSelected" />
背后的代码是:
protected string GetClickPostBack(int itemIndex)
{
if (CanSelect)
//return 0.ToString();
return "javascript: " + Page.ClientScript.GetPostBackEventReference(this, VisitorRowPrefix + itemIndex) + "; return false;";
else
return string.Empty;
}
public void RaisePostBackEvent(string eventArgument)
{
if (eventArgument.StartsWith(VisitorRowPrefix))
{
HandleRowClick(Convert.ToInt32(eventArgument.Substring(VisitorRowPrefix.Length)));
}
}
private void HandleRowClick(int index)
{
int CmgVisitorId = Constants.NotConfigured;
// bool IsHistoricVisitor = false;
// Visitor HistoricVisitor = new Visitor();
// Mark only the clicked row
......等等。
答案 0 :(得分:2)
使用JavaScript / jQuery连接到网格按钮的点击事件,并通过2种可能的方式阻止他们的默认行为(回发后):
return false;
e.preventDefault
(仅限jQuery)示例(使用jQuery):
$('.button').click(function(event){
event.preventDefault();
//Write your client-side logic here
});
描述:如果调用此方法,则为事件的默认操作 不会被触发。
答案 1 :(得分:0)
如果我正确理解了该问题,请尝试更新面板。 Check out the documentation here.
<asp:UpdatePanel runat="server">
<ContentTemplate>
<asp:TableRow runat="server" id="trVisitor" CssClass='<%# GetRowClass() %>' >
<asp:TableCell ID="tdPicture" runat="server" Width="10" onclick='<%# GetClickPostBack(Container.ItemIndex) %>'>
<div style="margin-top:1px;">
<asp:Image ImageUrl=' <%# Page.ResolveUrl("~/" + Eval("Visitor.StatusImageUrl")) %>' visible='<%# historyFlag ? false : true %>' runat="server"/>
</div>
</asp:TableCell>
</ContentTemplate>
</asp:UpdatePanel>