使用单个事件处理程序asp.net处理网格中的多个删除事件

学习过度思考者困惑

我有两个包含删除按钮的网格,并且我正在使用RadAjaxManager,它将从客户端向服务器端OnajaxRequest发出ajax请求,其中包含事件处理程序,并且该事件处理程序将调用如下的delete事件:

<telerik:RadAjaxManager ID="RadAjaxManager2" runat="server" meta:resourcekey="RadAjaxManager1Resource1" OnAjaxRequest="RadAjaxManager2_AjaxRequest">
                <AjaxSettings>
                    <telerik:AjaxSetting AjaxControlID="RadAjaxManager2">
                        <UpdatedControls>
                            <telerik:AjaxUpdatedControl ControlID="Grid1" />
                            <telerik:AjaxUpdatedControl ControlID="Grid2" />
                        </UpdatedControls>
                    </telerik:AjaxSetting>
                </AjaxSettings>
            </telerik:RadAjaxManager>

 <telerik:RadGrid ID="Grid1" runat="server">
  ---
  ---
  <telerik:GridTemplateColumn HeaderText="Action" UniqueName="Action" HeaderStyle-Width="130px">
                                        <ItemTemplate>
                                     <asp:ImageButton runat="server" ID="Remove1" Text="Delete" OnClientClick='<%# Eval("Id", "javascript:return DeleteData(\"{0}\");") %>' />
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>

 <telerik:RadGrid ID="Grid2" runat="server">
  ---
  ---
  <telerik:GridTemplateColumn HeaderText="Action" UniqueName="Action" >
                                        <ItemTemplate>
                                     <asp:ImageButton runat="server" ID="Remove2" Text="Delete" OnClientClick='<%# Eval("Id", "javascript:return DeleteData(\"{0}\");") %>' />
                                        </ItemTemplate>
                                    </telerik:GridTemplateColumn>



 function DeleteData(Id) {
   var ajaxManager = null;
   var action = 'Remove';
   ajaxManager = $find("ctl00_cphMain_RadAjaxManager2");
   var arg = action + "," + Id; //Remove,1(1 indicates id of record to remove from grid)
   ajaxManager.ajaxRequest(arg);This line will fire below method.
  }



public event EventHandler RemoveEvent;
protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
        {
            var argument = (e.Argument);
            var stringArray = argument.Split(",".ToCharArray());//[0]="Remove",[1]=1
            if (stringArray[0] == "Remove")
            {
                RemoveEvent(stringArray[1], null);
            }
        }

在此之后,它将称为:

protected void Page_Load(object sender, EventArgs e)
        {
            this.RemoveEvent += Remove1_Click;
            this.RemoveEvent += Remove2_Click;
            if (!IsPostBack)
            {
            }
         }

protected void Remove1_Click(object sender, object obj)
        {
        }
protected void Remove2_Click(object sender, object obj)
        {
        }

问题是这两个事件都在调用,但是我只想单击Remove1和Remove2按钮来调用单个删除事件。

苏尼尔

您无需在代码隐藏中订阅事件,即无需this.RemoveEvent+=而是编写一个称为的方法RemoveRecord(buttonId, recordId)我已按以下分步说明了此方法。

  1. 首先更改的标记OnClientClick请注意,我们将传递要删除的记录的ID以及被单击到JavaScript函数的按钮的服务器端ID DeleteData

    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove1'); return false;") %>'   
    
    OnClientClick='<%# Eval("Id", "DeleteData('{0}', 'Remove2'); return false;") %>'
    
  2. 更改JavaScriptDelete方法。请注意,我们现在传递了服务器端按钮ID,因此在代码隐藏中,我们可以轻松知道单击了哪个按钮。

    function DeleteData(Id, buttonId) {
      var ajaxManager = null;
      ajaxManager = $find("<%=RadAjaxManager2.ClientID%>");
      var arg = buttonId + "," + Id; //Remove1,1 (1 indicates id of record to remove from grid)
      ajaxManager.ajaxRequest(arg);//This line will fire below method.
    }
    
  3. 在后面的代码中,只需包含一个RemoveRecord方法,就无需像原始代码中那样创建事件处理程序。因此,您应该从原始代码中删除以下方法:Remove1_ClickRemove2_Click并且还删除其中包含Page_Load单击事件的代码

    protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
    {
     var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1" or "Remove2",[1]=id of record to delete
     RemoveRecord( stringArray[0], stringArray[1]);
    }
    
    //the method below will delete data
    private void RemoveRecord( buttonId, recordId) 
    {
     if(buttonId== "Remove1")
      {
        //code to delete record with id of recordId
      } 
     else if ( buttonId == "Remove2")
      {
        //code to delete record with id of recordId
      }
    }
    

另一种方法

如果必须RadAjaxManager2_AjaxRequest在父页面中有,而在子页面中必须有删除方法,则可以在标题中提到的适当位置添加以下代码。但是请注意,上述方法中提到的标记更改和JavaScript函数更改也适用于此方法。

在父页面中(就在课堂之外)

public class RemoveEventArgs : EventArgs
{
public RemoveEventArgs ( string buttonId, string recordId)
{
   this.ButtonId = buttonId;
   this.RecordId = recordId;
}
    public string ButtonId {get;set;}
    public string RecordId {get;set;}
}

同样,在同一父页面中,将方法更改RadAjaxManager2_AjaxRequest为下面给出的方法

在父页面中(更改此现有方法)

 protected void RadAjaxManager2_AjaxRequest(object sender, AjaxRequestEventArgs e)
 {
            var stringArray = e.Argument.Split(",".ToCharArray());//[0]="Remove1",[1]=1 OR [0]="Remove2", [1] = 212
            if (stringArray[0] == "Remove1"  || stringArray[0] == "Remove2")
            {
                 if(RemoveEvent!=null) 
                 {
                   RemoveEvent(this, new RemoveEventArgs(stringArray[0], stringArray[1]));
                 }
            }
 }

在子页面中(更改现有方法)

protected void Remove1_Click(object sender, RemoveEventArgs obj)
  {
    if( obj!=null && obj.ButtonId == "Remove1") 
    {
      string recordId = obj.RecordId;
      //write your code for deleting


    }
  }
protected void Remove2_Click(object sender, RemoveEventArgs obj)
 {
  if( obj!=null && obj.ButtonId == "Remove2") 
    {
      string recordId = obj.RecordId;
      //write your code for deleting


    }
 }

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用单个方法添加/删除 c# 事件处理程序

来自分类Dev

JS / jQuery-在单个事件处理程序上使用全局事件处理程序

来自分类Dev

在事件处理程序中删除jQuery事件处理程序

来自分类Dev

使用同一事件处理程序处理多个事件

来自分类Dev

删除事件处理程序

来自分类Dev

使用.off()删除多个相同的事件处理程序

来自分类Dev

使用按钮事件处理程序删除行

来自分类Dev

对多个按钮使用相同的事件处理程序

来自分类Dev

对单个选择器上的多个事件处理程序使用.off函数

来自分类Dev

从内存(ORTC)中删除事件处理程序

来自分类Dev

Vb.Net中的事件处理程序

来自分类Dev

删除特定的事件处理程序

来自分类Dev

事件处理程序自动删除

来自分类Dev

从<a>删除click事件处理程序

来自分类Dev

将事件委托添加到ASP.NET用户控件的事件处理程序中

来自分类Dev

如何为将由PageHandlerFactory处理的ASP.NET中的每个请求添加事件处理程序

来自分类Dev

在事件处理程序中获取剑道网格名称

来自分类Dev

在 gpio 中处理多个事件

来自分类Dev

图像按钮的ASP.NET事件处理程序未触发

来自分类Dev

动态创建按钮的asp.net事件处理程序

来自分类Dev

在ASP.NET事件处理程序中使用异步/等待是否安全?

来自分类Dev

事件处理程序以及Haste中的事件

来自分类Dev

事件处理程序以及Haste中的事件

来自分类Dev

无法在ASP.NET应用程序中触发事件处理程序

来自分类Dev

事件处理程序中的setTimout

来自分类Dev

JavaScript中的事件处理程序

来自分类Dev

不删除事件处理程序会导致.Net问题吗?

来自分类Dev

如何在JavaScript中为各种事件创建单个事件处理程序

来自分类Dev

事件处理程序中的事件处理程序正在相乘

Related 相关文章

  1. 1

    使用单个方法添加/删除 c# 事件处理程序

  2. 2

    JS / jQuery-在单个事件处理程序上使用全局事件处理程序

  3. 3

    在事件处理程序中删除jQuery事件处理程序

  4. 4

    使用同一事件处理程序处理多个事件

  5. 5

    删除事件处理程序

  6. 6

    使用.off()删除多个相同的事件处理程序

  7. 7

    使用按钮事件处理程序删除行

  8. 8

    对多个按钮使用相同的事件处理程序

  9. 9

    对单个选择器上的多个事件处理程序使用.off函数

  10. 10

    从内存(ORTC)中删除事件处理程序

  11. 11

    Vb.Net中的事件处理程序

  12. 12

    删除特定的事件处理程序

  13. 13

    事件处理程序自动删除

  14. 14

    从<a>删除click事件处理程序

  15. 15

    将事件委托添加到ASP.NET用户控件的事件处理程序中

  16. 16

    如何为将由PageHandlerFactory处理的ASP.NET中的每个请求添加事件处理程序

  17. 17

    在事件处理程序中获取剑道网格名称

  18. 18

    在 gpio 中处理多个事件

  19. 19

    图像按钮的ASP.NET事件处理程序未触发

  20. 20

    动态创建按钮的asp.net事件处理程序

  21. 21

    在ASP.NET事件处理程序中使用异步/等待是否安全?

  22. 22

    事件处理程序以及Haste中的事件

  23. 23

    事件处理程序以及Haste中的事件

  24. 24

    无法在ASP.NET应用程序中触发事件处理程序

  25. 25

    事件处理程序中的setTimout

  26. 26

    JavaScript中的事件处理程序

  27. 27

    不删除事件处理程序会导致.Net问题吗?

  28. 28

    如何在JavaScript中为各种事件创建单个事件处理程序

  29. 29

    事件处理程序中的事件处理程序正在相乘

热门标签

归档