2

我有一个按钮,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());

我以前使用过上面的代码,它已经工作了,但这次不行。唯一的区别是我使用的是另一个站点的母版页,而不是这个站点,而且这个站点也有一个计时器。

<head>aspx 页面中是否有与加载相关的 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);

        }
}
4

2 回答 2

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 );
于 2012-06-29T17:40:18.553 回答
2

你没有在这里编码任何东西:

sb.Append(message);

如果消息是Hello Jean d'Arc(注意单引号),您将得到以下代码:

alert('Hello Jean d'Arc');

我让你想象这个=>当然是一个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方法。

于 2012-06-29T17:39:47.287 回答