处理点击事件而不回发

时间:2014-09-25 13:45:24

标签: c# asp.net listview webforms mouseclick-event

我有一个填充数据的列表视图。此列表视图位于名为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

......等等。

2 个答案:

答案 0 :(得分:2)

使用JavaScript / jQuery连接到网格按钮的点击事件,并通过2种可能的方式阻止他们的默认行为(回发后):

  1. return false;
  2. e.preventDefault(仅限jQuery)
  3. 示例(使用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>
相关问题