我需要向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;
}
答案 0 :(得分:3)
尝试使用等号而不是磅(并且不要忘记单引号)。
OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"
但是,如果您的ImageButton位于DataGrid或GridView中,则不会评估服务器端代码,并且会显示一条警告&lt;%= GetConfirmExportMessage()%&gt;而不是真正的信息。
要解决此问题(并提高性能,吞吐量等),请将消息输出一次到变量,然后提醒变量的内容。
<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。这个解决方案可能更好,因为数据不会发送到客户端,只在必要时才会被检索。
答案 1 :(得分:1)
你可能想要
OnClientClick="return confirm('<%= GetConfirmExportMessage()%>');"
请注意,这将在呈现页面时填充,而不是在单击按钮时填充,因此您也可以使用
btnExportRed.OnClientClick = "javascript:return confirm('" + GetConfirmExportMessage() + "');"
在您的代码中。
答案 2 :(得分:1)
您需要在'
<asp:ImageButton
OnClientClick="return confirm('<%# GetConfirmExportMessage()%>');"
OnClick="btnExportRed_Click"
runat="server"
ImageUrl="~/Images/excel_red.gif"
ID="btnExportRed"
AlternateText="Export all records!"/>