2012-08-22 46 views
3

我需要将确认消息返回给OnClientClick事件。问题是我必须从存储过程中获取消息,而且我似乎没有将我的功能调用正确。使用后面的代码弹出aspx确认消息

<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; 
    } 
+0

'confirm'是一个JavaScript函数,它以一个字符串作为参数(该消息被显示)。一个字符串必须用''''或'''包装在javascript中,否则js引擎会假设你正试图调用另一个函数或变量名称,所以这不起作用:'confirm(my name is anna )'这个工程:'确认('我的名字是安娜')' –

回答

1

你可能想

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

注意,这将填充当页面呈现,而不是当按钮被点击,所以你可能以及使用

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

在你身上后面的代码。

3

尝试使用等号而不是英镑(并且不要忘记您的单引号)。

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

但是,如果你的ImageButton位于DataGrid或GridView控件里面,服务器端代码将无法进行评估,并会yeield>而不是真正的消息,警告说<%= GetConfirmExportMessage()% 。要解决此问题(并提高性能,吞吐量等),请将消息一次输出到变量,然后警告变量的内容。

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

后来,在GridView ...

OnClientClick="return confirm(myMessage);" 

您可以通过重复一个小变量名称,比如“myMessage”来节省吞吐量和避免重蹈一些大的消息。另外请注意,方法GetConfirmExportMessage不会被称为增加数十倍的性能。

如果您的消息是特定于当前行中的数据而不是静态的,例如“Are you sure?”,那么我建议您在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。这个解决方案可能是更好的解决方案,因为数据不会发送到客户端,只有在需要时才能检索。

+0

我试过了OnClientClick =“return confirm(' '<%= GetConfirmExportMessage()%>');“,但我只在警报消息中获得<%#GetConfirmExportMessage()%>或<%#GetConfirmExportMessage()%>。当只使用OnClientClick =“返回确认(<%= GetConfirmExportMessage()%>);”时,我得到一个脚本错误。 –

+0

ImageButton是否是另一个控件模板中的数据网格? –

+0

错误消息:语法错误客户端代码正常工作。是的,ImageButton在GridView中。 –

1

你需要用你的确认'

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