私はこれを読んでいます 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ディレクティブまたはアセンブリ参照がありませんか?)
ここで何が間違っていますか?
簡単な方法を次に示します。
Response.Write("<script>alert('Hello');</script>");
string script = string.Format("alert('{0}');", cleanMessage);
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert"))
{
page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true /* addScriptTags */);
}
このメッセージは警告メッセージを直接表示します
ScriptManager.RegisterStartupScript(this,GetType(),"showalert","alert('Only alert Message');",true);
このメッセージは、JavaScript関数からの警告メッセージを表示します
ScriptManager.RegisterStartupScript(this, GetType(), "displayalertmessage", "Showalert();", true);
これらは、C#コードビハインドでアラートメッセージを表示する2つの方法です。
ページでScriptManagerを使用している場合は、これを使用することもできます。
System.Web.UI.ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "AlertBox", "alert('Your Message');", true);
この方法を試してください:
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
ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('ID Exists ')</script>");
動作しない理由は複数あります。
1:関数を適切に呼び出していますか?つまり.
Repository.Show("Your alert message");
2:scriptblockの代わりにRegisterStartUpScriptメソッドを使用してみてください。
3:UpdatePanelを使用している場合、それも問題になる可能性があります。
チェック this(topic 3.2)
コードはコンパイルされません。持っている文字列が突然終了します。
string script = "<script type=";
それは事実上あなたが書いたものです。二重引用符をエスケープする必要があります。
string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
この種のことは、ソースコードの色付けを完全に行う必要があるため、痛々しいほど明白です。
空白のページに表示せずに、同じページに警告ボックスを表示する場合は、これを試してください。
ScriptManager.RegisterStartupScript(this, GetType(), "showalert", "alert('Sorry there are no attachments');", true);
そして、私は思う、行:
string cleanMessage = message.Replace("'", "\'");
動作しない、それはする必要があります:
string cleanMessage = message.Replace("'", "\\\'");
\
を\
でマスクし、'
を別の\
でマスクする必要があります。
コードビハインドから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);
string script = string.Format("alert('{0}');", cleanMessage);
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key_name", script );", true);
この行を修正する必要があります:
string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
そしてこれも:
RegisterClientScriptBlock("alert", script); //lose the typeof thing
問題なく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());
イベントが特別にPAGE LOADイベントである場合にのみ、スクリプトを呼び出すことはできません。
response.Write(script);を呼び出す必要があります。
上記のように、文字列script = "alert( '" + cleanMessage + "');"; Response.Write(script);
少なくともページ読み込みイベントでは確実に動作します。
次のコードを使用できます。
StringBuilder strScript = new StringBuilder();
strScript.Append("alert('your Message goes here');");
Page.ClientScript.RegisterStartupScript(this.GetType(),"Script", strScript.ToString(), true);
string script = "<script type="text/javascript">alert('" + cleanMessage + "');</script>";
この場合、string.Formatを使用する必要があります。これは、より良いコーディングスタイルです。あなたにとっては:
string script = string.Format(@"<script type='text/javascript'>alert('{0}');</script>");
また、「」記号をエスケープするか、代わりにアポストロフィを使用する必要があることに注意してください。
Type = "text/javascript"を囲む引用符は、希望する前に文字列を終了しています。この問題を回避するには、内部に単一引用符を使用します。
これを使って
type = 'text/javascript'
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);
}
試してください:
string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
コードビハインドファイルをマッサージしたい場合は、これを試してください
string popupScript = "<script language=JavaScript>";
popupScript += "alert('Your Massage');";
popupScript += "</";
popupScript += "script>";
Page.RegisterStartupScript("PopupScript", popupScript);
引用符をエスケープする (「特殊文字」セクションを見てください)が必要です。それらの前にスラッシュを追加することでそれを行うことができます:
string script = "<script type=\"text/javascript\">alert('" + cleanMessage + "');</script>";
Response.Write(script);
私はこれを使用し、その後ページがリダイレクトされない限り機能します。表示させて、リダイレクトに関係なくユーザーが[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);
}
}
}
このメソッドは、クライアント側のコードを文字列パラメーターとして送信した後に使用できます。
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);
}
<!--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 -->