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エラーです。

このエラーを修正するには、引数が適切にエンコードされていることを確認してください。これを行う 1 つの方法は、JSON でシリアル化することです。

var serializer = new JavaScriptSerializer();
sb.AppendFormat("alert({0});", serializer.Serialize(message));

また、既にタグが含まれているため<script>、関数の最後の引数として false を渡して、タグをRegisterClientScriptBlock2 回追加しないようにしてください。

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 に答える