【问题标题】:jconfirm does not work on gridview delete functionalityjconfirm 不适用于 gridview 删除功能
【发布时间】:2020-11-24 21:46:37
【问题描述】:

我有一个使用 ObjectDataSource 显示信息的小部件 我有一个带有删除命令的删除按钮,该命令直接将命令发送到 ObjectDataSource 我想在删除前显示确认,点击确认按钮不会进行删除操作 请帮助设置回发

                <asp:TemplateField>

                <ItemTemplate>
                   
                    <asp:LinkButton ID="lnkRemove" runat="server" CommandName="delete" OnClientClick="return confirms(this.name,'Do you want to delete the record?');"><img src="/icons/trash.png" title="Delete" /></asp:LinkButton>
                </ItemTemplate>
                 </asp:TemplateField>

我的脚本:

function confirms(uniqueID,message)
{
    var r = false;
    $.confirm({
        title: 'Alert',
        content: message,
        buttons: {
            confirm: function () {

                      __doPostBack(uniqueID, '');
                    
            },
            cancel: function () {
               
              
            }
        }
    });
   
    return r;
}

只刷新页面,不删除记录

【问题讨论】:

    标签: javascript c# jquery asp.net


    【解决方案1】:

    像大多数(如果不是全部)jQuery 函数一样,它们是非阻塞的。代码不会等待。

    因此,您必须在确认后将呼叫连接到按钮。

    这意味着:

    OnClientClick="return confirms(this.name,'Do you want to delete the record?');"
    

    必须始终返回 false。例如:

    OnClientClick="confirms(this.name,'Do you want to delete the record?');return false;"
    

    “确认”例程不会等待也不会阻塞 js 代码。

    在使用 js 时几乎没有例外——比如 alert() 和 confirm()。

    从 jQuery 或插件的道路开始,现在它们是异步代码。

    您可以使用内置的 JavaScript “确认”,这样就可以了。

    OnClientClick="return confirm(this.name,'Do you want to delete the record?');"
    

    上述方法有效,因为代码停止了。但是 jQuery 代码不会暂停或锁定浏览器——而且在大多数情况下,阻塞代码会很快从所有浏览器代码中删除。

    另一方面,您使用的是什么 jConfirm?大约有 500 种不同的 - 有些可能会阻塞代码,也许你可以让函数返回 true 或 false - 但话又说回来,我们只能猜测,对吧?

    我看不到(或不知道)您正在使用什么“确认”小部件。所以,这对我来说是一个疯狂的猜测。而且很忙?不要以为我可以在大约 2-3 天后回到这篇文章。感恩节周末快到了。 (提示:当你决定使用一些 js 代码小部件时,如果你注意到你正在使用的东西,这将真的很有帮助。

    一种方法是解雇您自己的回发(而且您似乎确实在走这条路 - 我在您的代码中看到回发)。

    当您这样做时,您必须在页面加载事件中获取回发。 (__DoPostBack 也不会触发服务器端(按钮代码后面)事件)。但是,回发确实会发生 - 因此您可以在表单加载事件中使用 __DoPostBack 获取您传递的内容。

    所以,你可以说在你的页面加载中这样做:

    If IsPostBack then
    
        If Request("__EVENTTARGET") = "Some Button Name ID" Then
    
           ' the 2nd parm of __DoPostBack can be picked up
           ' with Request("__EVENTARGUMENT")
    
        End If
    End If  
    

    所以,你传递 '' 来回帖 - 你可能想说传递一些 PK ID 或类似的(比如 rowindex)。但是,您不会触发任何网格视图事件(例如行命令或索引行更改事件)。因此,您必须通过一些 PK id 或其他方式来确定您正在处理的行。然后从上面调用你的例程来做你需要或想做的任何事情。

    您可以这样传递当前的 PK 值:

    OnClientClick='<%# "myclick(this.name," + Eval("ID").ToString + "," +
       Container.DataItemIndex.ToString + ");return false;" %>' />
    

    在上面,我传递了所有 3 个值。

    The control name, 
    a Eval("row from data source") (you can pick up any data column),
    and also the grid index row value.
    

    因此,此脚本将是:

    function myclick(mycontrolname,MyPKID, MyRowIndex) {
                alert('control name = '  + mycontrolname);
                alert('My PK ID = ' + MyPKID);
                alert('My grid row index = ' + MyRowIndex);
            }
    

    因此,您可以选择要在 _DoPostBack 命令中传递的 3 个值中的哪一个,但您必须在表单页面加载事件中捕获该 _DoPostBack。

    因此,理论上,您可以传递上述 3 个值之一(或全部)。然后,您在 _DoPostBack 中传回上述其中一项,并按照上述在表单加载事件中提取它。

    【讨论】:

      猜你喜欢
      • 2018-05-11
      • 1970-01-01
      • 1970-01-01
      • 2015-11-27
      • 2017-04-15
      • 2014-11-24
      • 1970-01-01
      • 2019-11-15
      • 1970-01-01
      相关资源
      最近更新 更多