web-dev-qa-db-ja.com

JavaScript:ASP.NETコードビハインドからのAlert.Show(message)

私はこれを読んでいます JavaScript:Alert.Show(message)From ASP.NET Code-behind

私は同じことを実装しようとしています。そこで、次のような静的クラスを作成しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Text;
using System.Web.UI;

namespace Registration.DataAccess
{
    public static class Repository
    {
        /// <summary> 
        /// Shows a client-side JavaScript alert in the browser. 
        /// </summary> 
        /// <param name="message">The message to appear in the alert.</param> 
        public static void Show(string message) 
            { 
               // Cleans the message to allow single quotation marks 
               string cleanMessage = message.Replace("'", "\'"); 
               string script = "<script type="text/javascript">alert('" + cleanMessage + "');</script>"; 

               // Gets the executing web page 
               Page page = HttpContext.Current.CurrentHandler as Page; 

               // Checks if the handler is a Page and that the script isn't allready on the Page 
               if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert")) 
               { 
                 page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert", script); 
               } 
            } 
    }
}

この行で:

string script = "<script type="text/javascript">alert('" + cleanMessage + "');</script>"; 

エラーを表示しています:;期待される

そしてまた

page.ClientScript.RegisterClientScriptBlock(typeof(Alert), "alert", script); 

Err:タイプまたはネームスペース名「アラート」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか?)

ここで何が間違っていますか?

51
RG-3

簡単な方法を次に示します。

Response.Write("<script>alert('Hello');</script>");
106
Muhammad Akhtar
string script = string.Format("alert('{0}');", cleanMessage);
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert")) 
{
    page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true /* addScriptTags */);
}
22
cem

このメッセージは警告メッセージを直接表示します

ScriptManager.RegisterStartupScript(this,GetType(),"showalert","alert('Only alert Message');",true);

このメッセージは、JavaScript関数からの警告メッセージを表示します

ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "Showalert();", true);

これらは、C#コードビハインドでアラートメッセージを表示する2つの方法です。

18
user2561316

ページでScriptManagerを使用している場合は、これを使用することもできます。

System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "AlertBox", "alert('Your Message');", true);
9
Andrusho

この方法を試してください:

public static void Show(string message) 
{                
    string cleanMessage = message.Replace("'", "\'");                               
    Page page = HttpContext.Current.CurrentHandler as Page; 
    string script = string.Format("alert('{0}');", cleanMessage);
    if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert")) 
    {
        page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true /* addScriptTags */);
    } 
} 

Vb.Netで

Public Sub Show(message As String)
    Dim cleanMessage As String = message.Replace("'", "\'")
    Dim page As Page = HttpContext.Current.CurrentHandler
    Dim script As String = String.Format("alert('{0}');", cleanMessage)
    If (page IsNot Nothing And Not page.ClientScript.IsClientScriptBlockRegistered("alert")) Then
        page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, True) ' /* addScriptTags */
    End If
End Sub
5
Xtian11
ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('ID Exists ')</script>");
4
Ahmad lahham

動作しない理由は複数あります。

1:関数を適切に呼び出していますか?つまり.

Repository.Show("Your alert message");

2:scriptblockの代わりにRegisterStartUpScriptメソッドを使用してみてください。

3:UpdatePanelを使用している場合、それも問題になる可能性があります。

チェック this(topic 3.2)

4
gbs

コードはコンパイルされません。持っている文字列が突然終了します。

string script = "<script type=";

それは事実上あなたが書いたものです。二重引用符をエスケープする必要があります。

string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";

この種のことは、ソースコードの色付けを完全に行う必要があるため、痛々しいほど明白です。

4
Tejs

空白のページに表示せずに、同じページに警告ボックスを表示する場合は、これを試してください。

ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('Sorry there are no attachments');", true);
3
jithin john

そして、私は思う、行:

string cleanMessage = message.Replace("'", "\'"); 

動作しない、それはする必要があります:

string cleanMessage = message.Replace("'", "\\\'");

\\でマスクし、'を別の\でマスクする必要があります。

3
Kirsten

コードビハインドからJavaScript関数を呼び出す

ステップ1 Javascriptコードを追加します

<script type="text/javascript" language="javascript">
    function Func() {
        alert("hello!")
    }
</script>

ステップ2 WebFormに1 スクリプトマネージャーを追加し、1 ボタンも追加します

ステップ3ボタンクリックイベントにこのコードを追加します

ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true);
3
Orlando Herrera
string script = string.Format("alert('{0}');", cleanMessage);     
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key_name", script );", true);
2
Nick Kahn

この行を修正する必要があります:

string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>"; 

そしてこれも:

RegisterClientScriptBlock("alert", script); //lose the typeof thing
2
Adrian Carneiro

問題なく100%動作し、別のページにリダイレクトされません...これをコピーしてメッセージを変更しようとしました

// Initialize a string and write Your message it will work
string message = "Helloq World";
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("alert('");
sb.Append(message);
sb.Append("');");
ClientScript.RegisterOnSubmitStatement(this.GetType(), "alert", sb.ToString());
2
Attaullah Khan

イベントが特別にPAGE LOADイベントである場合にのみ、スクリプトを呼び出すことはできません。

response.Write(script);を呼び出す必要があります。

上記のように、文字列script = "alert( '" + cleanMessage + "');"; Response.Write(script);

少なくともページ読み込みイベントでは確実に動作します。

1
Edwin b

次のコードを使用できます。

 StringBuilder strScript = new StringBuilder();
 strScript.Append("alert('your Message goes here');");
 Page.ClientScript.RegisterStartupScript(this.GetType(),"Script", strScript.ToString(), true);
1
Tabish Usman
string script = "<script type="text/javascript">alert('" + cleanMessage + "');</script>"; 

この場合、string.Formatを使用する必要があります。これは、より良いコーディングスタイルです。あなたにとっては:

string script = string.Format(@"<script type='text/javascript'>alert('{0}');</script>");

また、「」記号をエスケープするか、代わりにアポストロフィを使用する必要があることに注意してください。

1
Jack Spektor

Type = "text/javascript"を囲む引用符は、希望する前に文字列を終了しています。この問題を回避するには、内部に単一引用符を使用します。

これを使って

 type = 'text/javascript'
1
R Kitty
private void MessageBox(string msg)
{
    Label lbl = new Label();
    lbl.Text  = string.Format(@"<script type='text/javascript'>alert('{0}');</script>",msg);
    Page.Controls.Add(lbl);
}
1
Silvio Marino

試してください:

string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
1
Carlos M

コードビハインドファイルをマッサージしたい場合は、これを試してください

string popupScript = "<script language=JavaScript>";
popupScript += "alert('Your Massage');";

popupScript += "</";
popupScript += "script>";
Page.RegisterStartupScript("PopupScript", popupScript);
1
Deepak Kushwaha

引用符をエスケープする (「特殊文字」セクションを見てください)が必要です。それらの前にスラッシュを追加することでそれを行うことができます:

string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
  Response.Write(script);
1
user2389005

私はこれを使用し、その後ページがリダイレクトされない限り機能します。表示させて、リダイレクトに関係なくユーザーが[OK]をクリックするまで待ちます。

/// <summary>
/// A JavaScript alert class
/// </summary>
public static class webMessageBox
{

/// <summary>
/// Shows a client-side JavaScript alert in the browser.
/// </summary>
/// <param name="message">The message to appear in the alert.</param>
    public static void Show(string message)
    {
       // Cleans the message to allow single quotation marks
       string cleanMessage = message.Replace("'", "\\'");
       string wsScript = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";

       // Gets the executing web page
       Page page = HttpContext.Current.CurrentHandler as Page;

       // Checks if the handler is a Page and that the script isn't allready on the Page
       if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
       {
           //ClientScript.RegisterStartupScript(this.GetType(), "MessageBox", wsScript, true);
           page.ClientScript.RegisterClientScriptBlock(typeof(webMessageBox), "alert", wsScript, false);
       }
    }    
}
1
Fandango68

このメソッドは、クライアント側のコードを文字列パラメーターとして送信した後に使用できます。

NOTE:私はこの解決策を思いつきませんでしたが、自分でそうする方法を探していたときに見つけました、私は少しだけ編集しました。

これは非常にシンプルで便利であり、それを使用してjavascript/jquery/... etcまたはクライアント側コードの1行以上を実行できます。

private void MessageBox(string msg)
{
    Label lbl = new Label();
    lbl.Text = "<script language='javascript'>" + msg + "')</script>";
    Page.Controls.Add(lbl);
}

ソース: https://stackoverflow.com/a/9365713/824068

1
M009
 <!--Java Script to hide alert message after few second -->
    <script type="text/javascript">
        function HideLabel() {
            var seconds = 5;
            setTimeout(function () {
                document.getElementById("<%=divStatusMsg.ClientID %>").style.display = "none";
            }, seconds * 1000);
        };
    </script>
    <!--Java Script to hide alert message after few second -->
0
JIYAUL MUSTAPHA