【问题标题】:deleting record when it shouldn't不应该删除记录
【发布时间】:2013-04-25 11:40:48
【问题描述】:

我正在尝试显示一个确认框,它与 Confirm 完美配合,但不适用于我的自定义消息框,

这行得通,

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {

        LinkButton link = (LinkButton)e.Row.Cells[4].Controls[2];
        if (link != null)
        {
            link.OnClientClick = "return confirm('Do you really want to delete?')";
        }
    }
}

但是当我把这个改为

link.OnClientClick = "ConfirmationBox()";


 function ConfirmationBox() 
    { 
    $.blockUI({ message: $('#question'), css: { width: '275px' } 
    }); 
    }

它显示消息框,但随后它也删除了我的记录:'(

还在困惑吗?看看这个,

Command field showing messagebox

编辑

<script type="text/javascript">
 $(document).ready(function() { 

 $('#yes').click(function() { 
        $.unblockUI(); 
        return true;
    });

    $('#no').click(function() { 
        $.unblockUI(); 
        return false; 
    }); 
}); 
 </script>

【问题讨论】:

  • 这是怎么回事?
  • 我称之为深度编程 :)

标签: c# javascript gridview webforms


【解决方案1】:

查看两个OnClientClick 事件之间的区别。正常工作的那个返回一个值,而不能正常工作的那个则没有。

当按钮被点击时,按钮动作被执行。还会执行单击操作。但是,如果单击操作返回 false,则取消按钮的操作。改变

link.OnClientClick = "ConfirmationBox()";

link.OnClientClick = "return ConfirmationBox()";

如果操作未确认,则使 ConfirmationBox() 返回 false。

【讨论】:

  • 感谢它解决了一半的问题,但是当我按“是”时,我现在无法删除记录
  • 关键在于我的最后一句“...make ConfirmationBox() return false 如果操作未确认”。如果动作确认,则需要返回true。
  • 动作是否被确认取决于是或否,是返回真,但之后什么都没有发生,先生
  • 哦,我看到你更新的代码了。需要返回true或false的是ConfirmationBox()方法,而不是yes或no按钮的点击事件。
【解决方案2】:

第二个选项很可能不会返回false,这就是为什么您的记录无论如何都会被删除的原因。您可以通过将其更改为来验证它:

function ConfirmationBox() 
    { 
      $.blockUI({ message: $('#question'), css: { width: '275px' }}); 
      return false;
    }

这并不是说这会阻止删除记录,但也不会让您删除它。您需要能够返回 UI 控件结果的东西。

你也应该修改链接:

link.OnClientClick = "return ConfirmationBox()";

【讨论】:

  • 我添加了更多有问题的代码,问题解决了一半,谢谢
  • 这里是一个完整的例子,可以用 blockUI highoncoding.com/Articles/… 完成你想要的事情
  • 我已经知道这样做的方式,但我想按照我上面提到的方式进行:)
  • 好的,那么您应该在#question div 中定义#yes 和#no div,这样当显示问题时,您就可以根据答案返回结果。
  • 如果它们已经在问题 div 中,那么您需要提供实际错误可能是萤火虫输出。
【解决方案3】:

正如吉姆所说,你必须拥有

link.OnClientClick = "return ConfirmationBox()";

ConfirmationBox 应始终返回 false。您需要多一个按钮来执行删除操作,如果用户按下是按钮,您需要触发该按钮的单击事件。我希望这是有道理的。

【讨论】:

  • 先生,如果您还没有阅读我的完整答案,请先阅读。要让它发挥作用,你需要按照我说的去做,否则 Jim 的回答将无法解决问题,你应该已经知道了。
猜你喜欢
  • 1970-01-01
  • 2021-07-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-08
  • 1970-01-01
相关资源
最近更新 更多