【问题标题】:ASP.NET alert newline from CodeBehind来自 CodeBehind 的 ASP.NET 警报换行符
【发布时间】:2013-02-21 17:50:34
【问题描述】:

我在 Page.aspx.cs 文件中有这样的代码:

void btnSessionCreate_Click(object sender, EventArgs e)
{
        if (Session["user"] == null)
        {
            Session["user"] = Guid.NewGuid().ToString();
            Response.Redirect("/");
        }
        else if (Session["user"] != null)
        {
            string userBrowser = Request.UserAgent.ToString();
            string sessionId = Session["user"].ToString();

            Response.Write("<script>alert('" + sessionId + "\r\n" + userBrowser + "');</script>");
        }
 }

主要问题是 Response.Write() 方法中的 "\r\n" 部分。我想用换行符分隔数据,但不能!

如果没有 "\r\n" ,脚本会很好地发出警报,但如果代码中存在,则不会发出警报,并且正在更改会重置其 CSS 样式。

为什么?

【问题讨论】:

  • 你不应该使用 response.write 来输出 JavaScript。糟糕的设计。看RegisterStartupscript
  • @epascarello 为什么我不应该使用它?
  • Response.Write 会搞砸流,并且何时发送它是不可靠的。使用代码中内置的方法注册 JavaScript。
  • @epascarello 以及如何从 CodeBehind 调用已注册的脚本?而且,我不想注册它 StartUp?不存在没有启动扩展的Regsiter?谢谢!
  • 阅读上面的文档,它用例子解释它。

标签: javascript asp.net newline alert


【解决方案1】:

使用@ 符号或双\\ 转义斜杠

string script = String.Format(@"<script>alert('{0}\r\n{1}');</script>", sessionId, userBrowser);

string script = String.Format("<script>alert('{0}\\r\\n{1}');</script>", sessionId, userBrowser);

Client.RegisterStartupScript(this.GetType(), "myscript", script, true);

More info on Client.RegisterStartupScript here

【讨论】:

  • 谢谢你的好回答,关于RegisterScript 方法的另一个小问题。如果我注册它,我怎么能从 CodeBehind 上的任何地方准确地调用它?谢谢!
  • 您可以在任何地方调用它 - button_click、page_load 等。它会在您的页面中插入一个 javascript sn-p,并在您的页面加载/重新加载后立即生效。在此类脚本中声明的任何函数都应该可用于您的页面。试一试,看看它是如何工作的。
【解决方案2】:

你只需要转义\,所以当输出到JavaScript时它们变成\

Response.Write("<script>alert('" + sessionId + "\\r\\n" + userBrowser + "');</script>");

或者:

Response.Write("<script>alert('" + sessionId + @"\r\n" + userBrowser + "');</script>");

您在上述行中的 C# 上下文中,因此 \r\n 被解释为需要由 Response.Write 输出的新行。那不是你想要的。您希望输出文字 \r\n,因此它们被解释为 JavaScript 换行符。

【讨论】:

    【解决方案3】:

    Response.Write("alert('" + sessionId + "\n" + userBrowser + "');");

    这将在 asp.net 中正常工作

    【讨论】:

      猜你喜欢
      • 2012-02-08
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-02
      • 1970-01-01
      相关资源
      最近更新 更多