【问题标题】:How to call JavaScript function in GridView Command Field?如何在 GridView 命令字段中调用 JavaScript 函数?
【发布时间】:2013-01-02 01:38:04
【问题描述】:

我返回了一个向用户询问确认消息的 Javascript 函数。 JavaScript 函数是

    function ConfirmOnDelete() {
    if (confirm("Are you sure to delete?"))
        return true;
    else
        return false;

GridView 如下:

    <asp:CommandField HeaderText="Delete" ShowDeleteButton="True" />

这里我想在用户单击 GridView 命令字段中的删除时调用 JavaScript 函数。 这个怎么称呼?

【问题讨论】:

    标签: c# javascript asp.net gridview


    【解决方案1】:

    假设您想继续使用您的 CommandField,您可以使用 GridView 的 OnRowDataBound 事件以编程方式执行此操作。

    GridView 声明中为 RowDataBound 事件指定事件处理程序:

    <asp:GridView ID="gv" runat="server" OnRowDataBound="gv_RowDataBound"....
    

    然后在您的事件处理程序(代码隐藏)中找到您的按钮(这里我假设 ImageButton,尽管这取决于您的 CommandField 中的 ButtonType 属性)并将 JavaScript 添加到其 OnClientClick 属性.

    protected void gv_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            ((ImageButton)e.Row.Cells[cell].Controls[ctrl]).OnClientClick = "return confirm('Are you sure you want to delete?');"; // add any JS you want here
        }
    }
    

    在上面的示例中,cell 是指您的CommandField 的列索引,而 ctrl 是指您所在单元格内的控件索引(删除按钮)参考。

    【讨论】:

      【解决方案2】:

      您最好避免在服务器端要求确认删除,使用javascript捕获用户最终决定然后转到服务器端执行您的逻辑。 CommandField 将不是这里的最佳解决方案。

      JS:

      <script type="text/javascript">
          function DeleteConfirm() {
      
              if (confirm("Are you sure you want to delete this customer from excluded customer list ?")) {
                  return true;
              }
              return false;
          }
      </script>
      

      HTML:

                  <asp:TemplateField HeaderText=" ">
                      <ItemTemplate>
                          <asp:LinkButton ID="lnk_RemoveFromlist" runat="server" Text="Delete"
                              CommandName="Delete" OnCommand="Delete_Command" CommandArgument='<%# Eval("ID").ToString()' OnClientClick='return DeleteConfirm()'></asp:LinkButton>
                      </ItemTemplate>
                  </asp:TemplateField>
      

      代码:

      protected void Remove_Command(object sender, CommandEventArgs e)
      {
          //Implement your Delete Logic
      }
      

      【讨论】:

      • 不确定您打算通过不关闭此处的代码块来实现什么 - CommandArgument='
      【解决方案3】:

      取消按钮的命令名称为“cancel”,删除按钮的命令名称为“delete”,请检查

      if(e.CommandName == "delete")
       {
         //script to delete();
       }
      else if(e.commandName == "cancel")
       {
         //close with some script;
       }
      

      在代码隐藏中调用javascript函数,

      Page.ClientScript.RegisterStartupScript(this.GetType(), "Call my function","loadPopupBox();", true);
      

      【讨论】:

        【解决方案4】:

        通常你必须指定OnClientClick="return confirm('Are you sure you want to delete ?');",但这不适用于CommandField,最好使用TemplateField,这可以更好地解释http://davesquared.net/2007/10/confirm-delete-for-gridview.html

        【讨论】:

        • 类型“System.Web.UI.WebControls.CommandField”没有名为“OnClientClick”的公共属性。这必须以编程方式添加到单元格或单元格中的删除按钮。
        • 是的,我试过了,但它显示错误为“CommandField 没有名为 OnClientClick 的公共属性”。
        【解决方案5】:

        您可以使用按钮的OnClientclick事件来调用该函数。例如

        <asp:button id="btndelete" runat="server" Text="delete" Onclientclick="if(!ConfirmOnDelete())return false;"/>
        

        【讨论】:

        • OP 指的是没有 OnClientClick 属性的
        【解决方案6】:

        HTML:

        <asp:GridView ID="GridView1" runat="server" OnRowDeleting="gv1_RowDeleting">
           <Columns>
               <asp:TemplateField HeaderText="Delete">
                  <ItemTemplate>
                           <asp:CommandField ShowDeleteButton="true" HeaderText="delete" />  
                  </ItemTemplate>
               </asp:TemplateField>
           </Columns>
        </asp:GridView>
        

        代码:

            protected void gv1_RowDeleting (object sender, GridViewDeleteEventArgs e) 
        {
        
            GridView1.Attributes.Add("OnClick", "return confirm('Really wanna delete?');");
        
               // implement your delete logic
        
            Response.Write("<script>alert("Delete Successful");</script>");
        
        }
        

        当我们点击 Gridview 中的“删除”命令字段时,这将调用 Javascript 函数,并且 Response.write 函数将发出数据已被删除的警报。你可以在这个函数中添加你想要执行的任何函数。

        【讨论】:

          【解决方案7】:

          使用启动脚本

              ScriptManager.RegisterStartupScript(Page, this.GetType(), "ConfirmOnDelete", "ConfirmOnDelete();", true);
          

          或者你也可以使用 onclientclick

          【讨论】:

          • 我在 gridview rowdeleting 事件中试过这个,但它提出了问题。但即使我点击取消它也会删除该行。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-05-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多