定义usercontrol输出的位置

时间:2013-07-02 14:56:17

标签: asp.net

我是ASP.NET和用户控件的新手。我试图从我的C#代码生成一个javascript数组。

在主.aspx页面上,我有这个:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="main.aspx.cs" Inherits="main" %>
<%@ Register Src="~/table.ascx" TagPrefix="uc1" TagName="myTable" %>

然后在我的table.asc.cs上我有这个:

protected void Page_Load(object sender, EventArgs e)
{
    (...)
    this.LoadDataFromDB();
    (...)
}

private void LoadDataFromDB()
{
    (...)
    Response.Write(array);
    (...)
}

我的问题是在<html>标记之前编写数组。它仍然可以正常工作,但是,我怎么能把它放在<head>标签中呢?

谢谢

更新:

我将此添加到我的main.aspx

<asp:Literal ID="Literalarray" runat="server" Mode="PassThrough"  Text="" /> 

这是我的ascx.cs:

   Literal Literalarray= new Literal();
   Literalarray.Text = output;

我错过了什么?

2 个答案:

答案 0 :(得分:4)

使用Literal控件而不是Response.Write。将它放在您控制的某处,并设置其Text属性。

您必须将其放在您的控件上,而不是放在您的页面上,而您无需重新注册它。

答案 1 :(得分:1)

ascx.cs中的代码:

   Literal Literalarray= new Literal();
   Literalarray.Text = output;

应该是:

   Literalarray.Text = output;

作为设计器文件在Page_Load中应该声明文字类型并为其分配空间。通过声明一个新的,可能隐藏旧的。另外,请注意,如果您要生成一个JavaScript数组,那么您也会将脚本标记生成为输出的一部分,因为文字不会对结果进行大量修饰。


我可能建议在main.aspx的头部放一个文字,然后以一种方式加载数据。

您还可以执行动态控件,以便在table.ascx.cs中创建一个Literal,就像之前一样,然后将其添加到页面的头部,假设head标签具有“runat = server”属性,那么后面的代码可以使用它。我很确定在桌面背后的代码中你可以做这样的事情:

   Literal Literalarray= new Literal();
   Literalarray.Text = output;
   this.Page.head.AddControl(Literalarray);