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

Posted

技术标签:

【中文标题】JavaScript:来自 ASP.NET 代码隐藏的 Alert.Show(message)【英文标题】:JavaScript: Alert.Show(message) From ASP.NET Code-behind 【发布时间】:2011-08-15 01:45:49 【问题描述】:

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

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

我在这里做错了什么?

【问题讨论】:

【参考方案1】:

type="text/javascript" 周围的引号会提前结束您的字符串。在里面使用单引号可以避免这个问题。

使用这个

 type='text/javascript'

【讨论】:

【参考方案2】:

您的代码无法编译。您的字符串意外终止;

string script = "<script type=";

这实际上就是您所写的。您需要转义双引号:

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

这种事情应该是非常明显的,因为你的源代码着色应该完全被劫持。

【讨论】:

来吧@Tejs,休息一下 :) 连续第三个问题,您提前几秒钟到达 :) 谢谢!警报错误呢? 这可能是劫持代码的副作用。如果不修复早期的错误,就不可能说。 谢谢 Tejs。但我没有从上面的代码中得到任何警报消息。 浏览器(萤火虫、开发者工具、蜻蜓……)说什么?脚本选项卡上有任何错误消息吗?【参考方案3】:

你需要修复这条线:

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

还有这个:

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

【讨论】:

谢谢!警报错误呢? 谢谢安德里安。但我没有从上面的代码中得到任何警报消息。 你应该一次修复一件事。修复字符串后是否还会出现此错误? 不!错误消失了。构建是成功的,但它没有向我显示任何类型的警报消息..【参考方案4】:

尝试:

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

【讨论】:

【参考方案5】:
string script = string.Format("alert('0');", cleanMessage);
if (page != null && !page.ClientScript.IsClientScriptBlockRegistered("alert")) 

    page.ClientScript.RegisterClientScriptBlock(page.GetType(), "alert", script, true /* addScriptTags */);

【讨论】:

【参考方案6】:

不工作的原因可能不止一个。

1:您是否正确调用了您的函数?即

Repository.Show("Your alert message");

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

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

查看this(topic 3.2)

【讨论】:

【参考方案7】:

这是一个简单的方法:

Response.Write("<script>alert('Hello');</script>");

【讨论】:

我不喜欢这种方式。你永远不会知道你的代码将被插入到哪里,因为它被插入到流中。它还可能会破坏 html 并导致 Javascript 错误。 RegisterClientScriptBlock 是在客户端运行 Javascript 的正确方法。【参考方案8】:
string script = string.Format("alert('0');", cleanMessage);     
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "key_name", script );", true);

【讨论】:

【参考方案9】:

您可以在将客户端代码作为字符串参数发送后使用此方法。

注意:我没有想出这个解决方案,但我在自己寻找方法时遇到了它,我只是稍微修改了一下。

它非常简单实用,可以使用它来执行超过 1 行的 javascript/jquery/...等或任何客户端代码

private void MessageBox(string msg)

    Label lbl = new Label();
    lbl.Text = "<script language='javascript'>" + msg + "')</script>";
    Page.Controls.Add(lbl);

来源:https://***.com/a/9365713/824068

【讨论】:

我认为有些部分丢失了。 ""【参考方案10】:
string script = "<script type="text/javascript">alert('" + cleanMessage + "');</script>"; 

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

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

另请注意,何时应该转义 " 符号或改用撇号。

【讨论】:

【参考方案11】:

试试这个方法:

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

【讨论】:

【参考方案12】:
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);

【讨论】:

【参考方案13】:

如果您在页面上使用 ScriptManager,那么您也可以尝试使用这个:

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

【讨论】:

这有效,但前提是页面是静态的且未重定向(请参阅我在其他地方的回答)。例如,如果您在此之后有一个 Response.Redirect() 来重新加载页面,则不会显示该消息。需要强制等待,直到用户按下 OK 或其他按钮。 是的,我们使用与上面类似的代码 v,大部分情况下它对我们有用,但在某些代码中它不起作用,可能是上面 @Fandango68 描述的原因。跨度> 【参考方案14】:

调用消息框很简单,所以如果你想在后面编码或调用函数,我认为它更好也可能不是。有一个进程,你可以使用命名空间

using system.widows.forms;

那么,你想在哪里显示一个消息框,就这么简单,就像在 C# 中一样:

messagebox.show("Welcome");

【讨论】:

问题是关于在客户端显示一条消息 - 使用 Javascript 如果是这样的话:^/【参考方案15】:

此消息直接显示警报消息

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

此消息显示来自 JavaScript 函数的警报消息

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

这是在c#代码后面显示警报消息的两种方式

【讨论】:

【参考方案16】:

我认为,这条线:

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

不行,一定是:

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

您需要用\ 屏蔽\,用另一个\ 屏蔽'

【讨论】:

【参考方案17】:

从后面的代码调用 JavaScript 函数

第 1 步添加您的 Javascript 代码

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

第 2 步在您的 webForm 中添加 1 个 Script Manager 并添加 1 个 按钮

第 3 步在您的按钮点击事件中添加此代码

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

【讨论】:

【参考方案18】:

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

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

【讨论】:

【参考方案19】:

您需要escape your quotes(查看“特殊字符”部分)。您可以通过在它们之前添加一个斜杠来做到这一点:

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

【讨论】:

【参考方案20】:

我使用它并且它可以工作,只要页面之后不重定向。很高兴让它显示,并等待用户点击确定,无论重定向如何。

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

【讨论】:

【参考方案21】:

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

【讨论】:

【参考方案22】:
ClientScript.RegisterStartupScript(Page.GetType(), "validation", "<script language='javascript'>alert('ID Exists ')</script>");

【讨论】:

请尽量避免只是将代码作为答案转储,并尝试解释它的作用和原因。对于没有相关编码经验的人来说,您的代码可能并不明显。【参考方案23】:

如果事件是专门的PAGE LOAD事件,调用脚本不能这样做。

你需要打电话, Response.Write(脚本);

如上所述, 字符串脚本 = "alert('" + cleanMessage + "');"; Response.Write(脚本);

肯定会至少在页面加载事件中起作用。

【讨论】:

示例代码1:string close = @""; base.Response.Write(close); 示例代码2:string close = @""; base.Response.Write(close);【参考方案24】:

如果你想按摩你的代码隐藏文件然后试试这个

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

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

【讨论】:

【参考方案25】:

您可以使用以下代码。

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

【讨论】:

【参考方案26】:
 <!--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 -->

【讨论】:

以上是关于JavaScript:来自 ASP.NET 代码隐藏的 Alert.Show(message)的主要内容,如果未能解决你的问题,请参考以下文章

来自 Javascript AJAX 的 ASP.NET MVC 操作调用收到 500 内部服务器错误

JavaScript、asp.net 和 Sql Server

全局记录来自 ASP.NET [ScriptService] 服务的异常

asp.net mvc 显示 ViewBag 字典到 javascript

为啥此代码给我来自 Request.Form 的无效内容类型? (ASP.NET 核心)

ASP.NET MVC - 来自控制器代码的当前操作?