3

我需要向 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;
    }
4

3 回答 3

3

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

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

但是,如果您的 ImageButton 位于 DataGrid 或 GridView 内,则不会评估服务器端代码,并会发出警告说 <%= GetConfirmExportMessage()%> 而不是真正的消息。

为了解决这个问题(并提高性能、吞吐量等),将消息输出一次到变量,然后警告变量的内容。

<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。此解决方案可能更好,因为数据不会发送到客户端,仅在必要时检索。

于 2012-08-22T10:12:07.100 回答
1

你可能想要

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

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

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

在你的代码后面。

于 2012-08-22T10:11:43.927 回答
1

你需要把你的确认包裹在'

<asp:ImageButton 
    OnClientClick="return confirm('<%# GetConfirmExportMessage()%>');"            
    OnClick="btnExportRed_Click" 
    runat="server" 
    ImageUrl="~/Images/excel_red.gif" 
    ID="btnExportRed" 
    AlternateText="Export all records!"/>
于 2012-08-22T10:12:11.610 回答