【问题标题】:Pass javascript code from asp.net从 asp.net 传递 javascript 代码
【发布时间】:2014-01-03 00:28:25
【问题描述】:

我正在尝试将我在服务器端使用 String Builder 构建的一些 JavaScript 代码(背后的 ASP.NET 代码)传递给 html 页面上的 JavaScript。这就是我正在做的事情。

我确实使用母版页和 aspx 页面,如下所示:

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
<script  type="text/javascript">
// Some initial JavaScript code
// followed by a Literal tag, to be replaced by 
// JavaScript code block which comes from code behind
<asp:Literal runat="server" ID="SomeID"></asp:Literal>

// some more JavaScript.
</script>
</asp:Content>

然后在 aspx.cs 页面后面的代码中:

protected void Page_Load(object sender, EventArgs e)
{
  Literal ID = (Literal)this.Page.FindControl("SomeID");
  ID.Text = SomeStuff();
}
private string SomeStuff()
{
  string javascript = "";
  StringBuilder sb = new StringBuilder();
  sb.Append("Some JavaScript Code");
  sb.Append("dynamically buildup on server side");
}

但是问题是 this.Page.FindContol("SomeID") 返回 NULL。在 script 标签内时,Literal ID 看起来是不可访问的。我不能在 script 标签内的文字控件周围使用 div 或 span 标签。 div/span 将在 JavaScript 代码中留下杂散标记。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • SomeID.Text = "some javascript";
  • 你试过我的答案了吗?
  • @Matthew 您的建议也有效。谢谢!

标签: c# javascript asp.net


【解决方案1】:

首先,您使用的是母版页吗?如果是?它的Master.FindControl()。除此之外,您是否有特殊原因要追加?我建议你使用RegisterStartupScriptBlock() 方法或RegisterClientScriptBlock() 方法

【讨论】:

  • 是的。我使用母版页,我尝试将 this.Page 替换为母版,但没有成功。
  • 我知道你已经接受了一个答案,但这里是对母版页问题的修订:`Master.FindControl("ContentPlaceHolder1").FindControl("someID") as where 是您要转换的任何内容,例如文字、文本框等。
  • 谢谢隆美尔!我不确定接受的解决方案是否适用于部署。我更新了我的问题,我的 ContentPlaceHolderID="MainContent"。我应该使用 Literal ID = Master.FindControl("MainContent").FindControl("SomeID") as Literal;
  • 太棒了!刚刚发现我的 Literal 的 ClientID 是 MainContent_SomeID。所以,我用 ID MainContent 替换了 ContentPlaceHolder1,JavaScript sn-p 显示在我想要的位置。谢谢:)
【解决方案2】:

据我了解,您正试图从后面的代码中将一些脚本分配给文字控件。

据我所知,在这种情况下,您的文字应该在 .aspx 页面中。 在后面的代码中准备好任何字符串生成器,一旦你的字符串生成器准备好,只需将字符串生成器分配给后面代码中的文字。

this.SomeID.Text = SomeStuff();

【讨论】:

  • 有趣的是,它似乎正在工作(至少没有抱怨)空引用。我想,因为在 page_load 上,服务器端控件的 ID 名称发生了变化。我应该使用 FindControl。谢谢,您为我节省了大量时间。
【解决方案3】:

你有没有试过这个:

protected void Page_Load(object sender, EventArgs e)
{  
var literals = Page.Master.FindControl("SomeID").Controls.OfType<Literal>();
// Literal ID = (Literal)this.Page.FindControl("SomeID");
 this.literals.Text = SomeStuff();
}

private string SomeStuff()
{
 string javascript = "";
 StringBuilder sb = new StringBuilder();
 sb.Append("Some JavaScript Code");
 sb.Append("dynamically buildup on server side");
 return sb;
}

【讨论】:

  • 谢谢纳耶姆!我尝试了你的建议,但是我一输入 literals.Text 就会出错??
  • 字面量有什么价值?
  • SomeStuff() 返回包含 javascript 代码 sn-p 的字符串生成器。
  • 谢谢纳耶姆!我认为我应该使用母版页 PlaceHolder 的 ID,而不是文字控件的 ID(即SomeID),在我的情况下是MainContentlink
猜你喜欢
  • 2013-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多