日期:2014-05-19  浏览次数:20497 次

关于自定义控件的输出机制,高分求教
我在自定义控件开发时,往往在客户端的输出形式为:
<span   ...>
      ......
      <script   ...>
            ......
      </script   ...>
</span   ...>

我的问题是:我希望在客户端的输出形式为:
<span   ...>
      ......
</span   ...>
<script   ...>
      ......
</script   ...>
请问该如何实现?更希望您能详细描述自定义控件的输出机制,或者推荐好文章。

------解决方案--------------------
你用.net几点几?

脚本输出有几种情况

1,Response.Write,这种在页面顶部

2, Page.ClientScript.RegisterStartupScript();
这种在 </from> 之前,建议你使用这种,这种可以使用页面上已经存在控件

3, Page.ClientScript.RegisterClientScriptBlock();
这种出现在 <form > 该标签之后,不建议你使用这种


这种要求,你可以重写Render,追加输出流,不过我没有试过
<span ...>
......
</span ...>
<script ...>
......
</script ...>

------解决方案--------------------
<span> 一般是label生成的,我测试了一下,你的目的是可以达到的


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace ABC
{
public class TestControl : System.Web.UI.WebControls.Label
{

public override void RenderEndTag(HtmlTextWriter writer)
{
base.RenderEndTag(writer);
writer.Write( " <script> document.write( 'abc '); </script> ");
}
}
}

引用页面
<%@ Register Assembly= "ABC " Namespace= "ABC " TagPrefix= "cc1 " %>
<cc1:TestControl runat= "server " Text= "abc "> </cc1:TestControl>

生成页面
<span> abc </span> <script> document.write( 'abc '); </script>