【问题标题】:use code behind to pop aspx confirmation message使用后面的代码弹出 aspx 确认消息
【发布时间】:2012-08-22 10:09:07
【问题描述】:

我需要向 OnClientClick 事件返回确认消息。问题是我必须从存储过程中获取消息,而且我似乎没有正确调用我的函数。

 <asp:ImageButton 
OnClientClick="return confirm(<%# GetConfirmExportMessage()%>);"            
OnClick="btnExportRed_Click" 
runat="server" 
ImageUrl="~/Images/excel_red.gif" 
ID="btnExportRed" 
AlternateText="Export all records!"/>

我的代码:

public string GetConfirmExportMessage()
    {
        string xmlFilterForExport = Parameters.ToString().Split('+')[4].Trim();
        string alertMessage = companiesSearcher.GetAlertMessage(xmlFilterForExport, 1, null, null, IdSegment, 1, Convert.ToInt32(RoDB2004.BLL.clsUsers.UserID));

        return alertMessage;
    }

【问题讨论】:

  • confirm 是一个 javascript 函数,它接受一个字符串作为参数(要显示的消息)。在 JavaScript 中,字符串必须包含在 "' 中。否则,js 引擎会假定您正在尝试使用该名称调用另一个函数或变量。因此这行不通:confirm(my name is anna),这行得通:confirm('my name is anna')

标签: c# asp.net onclientclick


【解决方案1】:

尝试使用等号而不是磅(不要忘记单引号)。

OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"

但是,如果您的 ImageButton 位于 DataGrid 或 GridView 内,则服务器端代码将不会被评估,并且会产生一个警告说 而不是真正的消息。

要解决此问题(并提高性能、吞吐量等),请将消息输出一次到变量,然后提醒变量的内容。

<script language="JavaScript">
    var myMessage = '<%= GetConfirmExportMessage()%>';
</script>

稍后,在 GridView...

OnClientClick="return confirm(myMessage);"

您可以通过重复“myMessage”之类的小变量名称来节省吞吐量,并避免重复一些大消息。另请注意,GetConfirmExportMessage 方法不会被调用数十次以提高性能。

如果您的消息特定于当前行中的数据,而不是像“您确定吗?”这样的静态消息,那么我建议您在 GridView 的 RowDataBound 事件中执行此操作。您将拥有对ImageButton 和当前行绑定到的数据的完全访问权限,这使得设置服务器端变得非常容易。查看FindControl() 方法,或者如果您知道确切的位置,只需引用它并拆箱对象。

protected void gvMyGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        ImageButton ibtn = (ImageButton)e.Row.FindControl("btnExportRed");
        if(ibtn != null)
        {
            ibtn.ClientClick = "return confirm('" + GetConfirmExportMessage() + "');";
        }
    }
}

作为替代解决方案,也许您应该研究 WebMethods、AJAX 和 jQuery。这种解决方案可能更好,因为数据不发送到客户端,仅在必要时检索。

【讨论】:

  • 我都试过了 OnClientClick="return confirm('');"和 OnClientClick="return confirm('');",但我只在警报消息中得到 或 。仅使用 OnClientClick="return confirm();" 时,出现脚本错误。
  • 另一个控件模板中的 ImageButton 是否像数据网格?
  • 错误消息:语法错误客户端代码工作正常。是的,ImageButton 在 GridView 内。
  • @Anna - 我已经更新了我的答案以包含 GridView 的一些替代方案。并阅读 WebMethods 和 jQuery,它实际上很容易实现。
  • 感谢您的所有帮助。我已经阅读了有关 WebMethods、Ajax 和 JQuery 的信息,但我无法实现其中的任何内容,因为我必须调用非静态方法才能获取我的消息。我最终在 btnExportRed_Click 上实现了 MessageBox 警报。
【解决方案2】:

您需要将您的确认包裹在'

<asp:ImageButton 
    OnClientClick="return confirm('<%# GetConfirmExportMessage()%>');"            
    OnClick="btnExportRed_Click" 
    runat="server" 
    ImageUrl="~/Images/excel_red.gif" 
    ID="btnExportRed" 
    AlternateText="Export all records!"/>

【讨论】:

    【解决方案3】:

    你可能想要

    OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"             
    

    请注意,这将在页面呈现时填充,而不是在单击按钮时填充,因此您不妨使用

    btnExportRed.OnClientClick = "javascript:return confirm('" + GetConfirmExportMessage() + "');" 
    

    在你的代码后面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2016-12-18
      • 2017-05-13
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      相关资源
      最近更新 更多