JavaScript:Alert.Show(消息)从ASP.NET代码隐藏

我正在阅读这个JavaScript:Alert.Show(消息)从ASP.NET代码隐藏

我正试图执行相同的。 所以我创build了一个这样的静态类:

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: 无法findtypes或名称空间名称“Alert”(是否缺less使用指令或程序集引用?)

我在这里做错了什么?

这是一个简单的方法:

 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#代码中显示警报消息的两种方法

如果你在页面上使用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 

你的代码不能编译。 您意外终止的string;

 string script = "<script type="; 

这就是你写的。 你需要避免你的双引号:

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

因为你的源代码着色应该是完全顶起来的,所以这种事情应该是非常明显的。

可能有不止一个理由不工作。

1:你正在调用你的function吗? 即

 Repository.Show("Your alert message"); 

2:尝试使用RegisterStartUpScript方法而不是scriptblock。

3:如果您使用UpdatePanel,那也可能是一个问题。

检查这个(主题3.2)

 ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('ID Exists ')</script>"); 

我认为,这一行:

 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个脚本pipe理器 ,并添加1 button

第3步添加此代码在您的button单击事件

 ScriptManager.RegisterStartupScript(this.Page, Page.GetType(), "text", "Func()", true); 

你需要修复这一行:

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

还有这个:

 RegisterClientScriptBlock("alert", script); //lose the typeof thing 
 string script = string.Format("alert('{0}');", cleanMessage); ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key_name", script );", true); 

如果要显示警告框以显示在同一页面上,而不显示在空白页面上,请尝试此操作。

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

工作100%没有任何问题,不会redirect到另一个页面…我试着复制这个,并改变你的消息

 // 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()); 

在type =“text / javascript”周围的引号在你想要的之前结束你的string。 在里面使用单引号来避免这个问题。

用这个

 types= '文本/ JavaScript的' 

尝试:

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

将客户端代码作为string参数发送后,可以使用此方法。

注意 :我没有提出这个解决scheme,但是当我自己寻找一个方法的时候遇到了,我只是稍微编辑了一下。

这是非常简单和有益的,可以用它来执行超过1行的JavaScript / jQuery / …等或任何客户端代码

 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

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

在这种情况下你应该使用string.Format。 这是更好的编码风格。 对你而言,这将是:

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

另外请注意,当你应该逃避“符号或使用apostroph代替。

 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>"; Response.Write(script); 

我使用这个,它的工作原理,只要该页面以后不redirect。 很高兴显示,并等待,直到用户单击确定,无论redirect。

 /// <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); } } } 

如果事件是专门的PAGE LOAD事件,则只能调用脚本。

你需要调用Response.Write(script);

如上所示,string script =“alert('”+ cleanMessage +“');”; 的Response.Write(脚本);

至less可以在页面加载事件中工作。

如果你想按摩你的代码背后的代码然后试试这个

 string popupScript = "<script language=JavaScript>"; popupScript += "alert('Your Massage');"; popupScript += "</"; popupScript += "script>"; Page.RegisterStartupScript("PopupScript", popupScript); 

你可以使用下面的代码。

  StringBuilder strScript = new StringBuilder(); strScript.Append("alert('your Message goes here');"); Page.ClientScript.RegisterStartupScript(this.GetType(),"Script", strScript.ToString(), true); 

它简单地调用一个消息框,所以如果你想要后面的代码或调用函数,我认为这是更好或可能不是。 有一个过程,你可以使用命名空间

 using system.widows.forms; 

那么,在那里你要显示一个消息框,就像在C#中一样简单地调用它,就像:

 messagebox.show("Welcome");