我有一个按钮,onclick设置为此方法,该方法应显示一个简单的JS警告弹出窗口:
string message = "File is already open. <br>Please close the file and try again.";
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<script type = 'text/javascript'>");
sb.Append("window.onload=function(){");
sb.Append("alert('");
sb.Append(message);
sb.Append("')};");
sb.Append("</script>");
ClientScript.RegisterClientScriptBlock(this.GetType(), "alert", sb.ToString());
我之前使用过上面的代码但它已经工作但不是这次。 唯一的区别是我使用的是其他网站的母版页,而不是这个版本,而且还有一个计时器。
在aspx页面的<head>
中是否有与加载相关的JS?
protected void btnToCSV_Click(object sender, EventArgs e)
{
try
{
StreamWriter writer = new StreamWriter(@"\\server location\test.csv");
Some writer.write stuff...
writer.Close();
}
catch (Exception ex)
{
lblMessage.Visible = true;
string message = "File is already open. Please close the file and try again.";
ClientScript.RegisterClientScriptBlock(
this.GetType(),
"alert",
string.Format("alert('{0}');", message),
true);
}
}
答案 0 :(得分:3)
尝试使用这个简单的版本
string message = "File is already open. <br>Please close the file and try again.";
ScriptManager.RegisterClientScriptBlock(
UpdatePanel1, // replace UpdatePanel1 by your UpdatePanel id
UpdatePanel1.GetType(), // replace UpdatePanel1 by your UpdatePanel id
"alert",
string.Format("alert('{0}');",message),
true );
答案 1 :(得分:2)
你在这里没有编码:
sb.Append(message);
如果消息是 Hello Jean d'Arc (请注意单引号),您将得到以下代码:
alert('Hello Jean d'Arc');
我要离开你想象这个结果=&gt;当然是一个javascript错误。
要修复此错误,请确保您已正确编码参数。一种方法是将JSON序列化它:
var serializer = new JavaScriptSerializer();
sb.AppendFormat("alert({0});", serializer.Serialize(message));
此外,由于您已经包含<script>
标记,因此请确保将false作为RegisterClientScriptBlock
函数的最后一个参数传递,以避免添加它们两次:
ClientScript.RegisterClientScriptBlock(
this.GetType(),
"alert",
sb.ToString(),
false // <!---- HERE
);
以下是完整代码的外观:
var message = "File is already open. <br>Please close the file and try again.";
var sb = new StringBuilder();
sb.Append("<script type=\"text/javascript\">");
sb.Append("window.onload=function() {");
var serializer = new JavaScriptSerializer();
sb.AppendFormat("alert({0});", serializer.Serialize(message));
sb.Append("};");
sb.Append("</script>");
ClientScript.RegisterClientScriptBlock(
this.GetType(),
"alert",
sb.ToString(),
false
);
另一个评论是,如果你在AJAX调用中这样做,你应该使用ClientScript.RegisterStartupScript
方法。