JavaScript:来自 ASP.NET 代码隐藏的 Alert.Show(message)

IT技术 c# javascript asp.net
2021-03-05 16:34:05

我正在阅读这个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); 

错误:找不到类型或命名空间名称“警报”(您是否缺少 using 指令或程序集引用?)

我在这里做错了什么?

6个回答

这是一个简单的方法:

Response.Write("<script>alert('Hello');</script>");
我不喜欢这种方式。你永远不会知道你的代码将被插入到哪里,因为它被插入到流中。它也可能会破坏 HTML 并导致 Javascript 错误。RegisterClientScriptBlock 是在客户端运行 Javascript 的正确方法。
2021-04-27 16:34:05
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);
这有效,但前提是页面是静态的且未重定向(请参阅我在别处的回答)。例如,如果您在此之后使用 Response.Redirect() 来重新加载页面,则不会显示该消息。需要强制等待,直到用户按下 OK 或其他什么东西。
2021-04-25 16:34:05
是的,我们使用与上述类似的代码 v.,大多数情况下它对我们有用,但在某些代码中它不起作用,可能是由于上面@Fandango68 描述的原因。
2021-05-10 16:34:05

试试这个方法:

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