【问题标题】:Script not inserted on page load页面加载时未插入脚本
【发布时间】:2014-04-28 12:55:26
【问题描述】:

我正在研究一个模拟类,我需要伪造从数据库中获取数据并将其在 json array 中发送到 javascript。但是,我无法让它工作,我已经学习了几个教程和示例,看起来我错过了一些东西。

这是我在CodeBehind 文件中的代码:

public class Segment : System.Web.UI.Page
{
    public int[,] GetAllSegments()
    {
        int[,] segments = new int[,] { { 1, 2 }, { 3, 4 }, { 5, 6 }, { 7, 8 } };

        return segments;
    }

    public void Page_Load(object sender, EventArgs e)
    {
        int[,] allSegments = GetAllSegments();

        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(allSegments);
        string script = String.Format("<script type=\"text/javascript\">var allSegments={0}</script>", json);
        this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", script, true);
    }
}

该脚本从未出现,我也尝试使用RegisterStartupScript,但这也不起作用......

在我的 HTML 页面中,我在顶部添加了以下内容:&lt;%@ Page Language="C#" CodeBehind="Dashboard.aspx.cs" %&gt;

谁能发现问题?非常感谢任何帮助!

【问题讨论】:

  • 你试过调试吗?你的代码被执行了吗?
  • 是的,我调试了它,没有抛出任何错误。不确定我的代码是否被执行,因为什么都没有发生。
  • 把你得到的脚本字符串放在这里
  • 将调试器放入脚本中,然后检查
  • 你的代码应该是段而不是仪表板

标签: c# javascript html asp.net json


【解决方案1】:

重点是,RegisterClientScriptBlock 方法中的最后一个参数被命名为 addScriptTags,并且由于您已将其设置为 true,因此您应该删除脚本标签并让 C# 为您添加这些标签:

    int[,] allSegments = GetAllSegments();

    JavaScriptSerializer serializer = new JavaScriptSerializer();
    string json = serializer.Serialize(allSegments);
    string script = String.Format("var allSegments={0};", json);
    this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", script, true);

或者只是将addScriptTags 设置为false

        int[,] allSegments = GetAllSegments();

        JavaScriptSerializer serializer = new JavaScriptSerializer();
        string json = serializer.Serialize(allSegments);
        string script = String.Format("<script type=\"text/javascript\">var allSegments={0};</script>", json);
        this.ClientScript.RegisterClientScriptBlock(this.GetType(), "clientScript", script, false);

我所做的另一个小改动就是在你的 js 代码末尾添加分号。

【讨论】:

  • 感谢您的意见,尝试了两种解决方案,但似乎仍然无法正常工作。可以肯定的是,在我的Dashboard.aspx 文件中必须出现一个带有var allSegments... 代码的脚本标签,对吗?
  • @Jef:是的,没错。我刚刚复制了您的代码,并按照我在答案中解释的方式执行了相同的操作,获取了视图源,它就在那里,还在控制台中检查了allSegments,您检查了控制台吗?
  • 哇,这很奇怪,是的,我已经检查了多次控制台和源代码。
  • @Jef:所以我认为还有一点需要考虑,你在 Segment.aspx 页面中有你的 onLoad,但你正在dashboard.aspx 中寻找它,这可能是问题所在!你检查过吗?
  • 顺便说一句,我刚刚在我的 HTML 页面中编辑了一些内容,Dashboard.aspx.designer.cs 中出现了一个错误,应该是一个标识符,类名已经消失,这与我的问题有关吗?
猜你喜欢
  • 1970-01-01
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-13
  • 1970-01-01
  • 2019-02-03
相关资源
最近更新 更多