.net 自定义控件输出客户端HTML
看了很多网上的大大写的控件输出客户端html,但是大多数都是人云亦云,结果都会卡在render输出的情况。
在此我对我对我写的一个成功的例子。
首先我们来讲述下自定义控件输出客户端html的原理:
我们知道所有的服务器端控件最终都会解析成客户端代码在IE上面执行浏览,这里需要用到HtmlTextWriter
总所周知在控件render的时候会通过HtmlTextWriter输出到客户端
![]()
具体实现:
第一步:新建一个自定义控件CommentUI.ascx
里面就一个repeater 控件:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CommentUI.ascx.cs" Inherits="WebAppClient.UserControl.CommentUI" %>
<asp:Repeater ID="repPL" runat="server">
<ItemTemplate>
<table width="100%" class="lineTop"><tr><td>
<div style="float:left;width:15%;">
<asp:HyperLink ID="imgurl" runat="server"><img style="height:30px; width:30px" src="<%# ((System.Data.DataRowView)Container.DataItem)["Img30_30Path"]%>" title="<%# ((System.Data.DataRowView)Container.DataItem)["NickName"] %>" id="<%# ((System.Data.DataRowView)Container.DataItem)["UserId"] %>"/ ></asp:HyperLink>
</div>
<div style="float:right;width:85%;">
<asp:HyperLink ID="NName" runat="server"><%# ((System.Data.DataRowView)Container.DataItem)["NickName"]%></asp:HyperLink>:<%# ((System.Data.DataRowView)Container.DataItem)["Message"]%></div>
</td></tr>
<tr><td>
<div style="float:right;">
<%--<asp:HyperLink ID="JB" runat="server" Text="举报"></asp:HyperLink><span>|</span>--%>
<asp:HyperLink ID="HF" runat="server" Text="回复"></asp:HyperLink>
</div>
</td></tr>
</table>
</ItemTemplate>
</asp:Repeater>
第二步:建立一个类ajaxpage
public class AjaxPage : Page
{
public override void VerifyRenderingInServerForm(Control control)
{
//base.VerifyRenderingInServerForm(control);
}
public override bool EnableEventValidation
{
get
{
return false;
}
set
{
base.EnableEventValidation = false;
}
}
}
继承page防止出错误:控件要包含在runat="server" 等
第三步:实现输出逻辑
1、定义一个事件委托,自定义控件传参数
public delegate void EventControl(Control sender, EventArgs e,params object[] parms);
2、实现的自定义控件输出逻辑
public static string RenderHtml<T>(this T p, string path, EventControl evt, params object[] parms)
where T:AjaxPage
{
Control ctl = p.LoadControl(path);
StringBuilder sb = new StringBuilder();
if (ctl != null)
{
StringWriter sw = new StringWriter(sb);
HtmlTextWriter htw = new HtmlTextWriter(sw);
evt(ctl, new EventArgs(),parms);
p.Controls.Add(ctl);
p.RenderControl(htw);
}
return sb.ToString();
}
浙公网安备 33010602011771号