【自定义控件(不是用户控件ascx)】设计时如何Parse控件的源代码?

uno 2003-08-04 10:06:39
运行时在HTML源代码内添加的子控件可以通过重写AddParsesSubObject方法添加经过标记解析的子控件,设计时这个方法没有响应,用什么办法能够实现在设计时对控件的HTML源代码解析?
...全文
67 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
uno 2003-08-04
  • 打赏
  • 举报
回复
试了一下的确是不可以的

因为设计时好像根本就没有Parse源码
saucer 2003-08-04
  • 打赏
  • 举报
回复
try to call EnsureChildControls() in GetHtml()?
saucer 2003-08-04
  • 打赏
  • 举报
回复
try to call EnsureChildControls() in GetHtml()?
saucer 2003-08-04
  • 打赏
  • 举报
回复
try to call EnsureChildControls() in GetHtml()?
uno 2003-08-04
  • 打赏
  • 举报
回复
其他的逻辑运行时没有问题,这个控件已经可以正常使用了——但是没有更好的设计时支持,只能将就着用……
uno 2003-08-04
  • 打赏
  • 举报
回复
就是一个控件在运行时解析正常,设计时不解析HTML源代码,导致设计时无法显示子控件。
这是我自定义一个Designer类获取控件的HTML结果后知道的。(设计时调试控件很麻烦)

控件源代码:
public class MultiPageDesigner : System.Web.UI.Design.ControlDesigner
{
public override string GetDesignTimeHtml()
{
MultiPage mp = (MultiPage)this.Component;
string html = mp.GetHtml();
System.Windows.Forms.MessageBox.Show(html);
string htmlText = System.Web.HttpUtility.HtmlEncode(html).Replace("\n", "<br>").Replace("\t", "    ");
return html + "<br>" + htmlText;
}
}
[DefaultProperty("Text"), ToolboxData("<{0}:MultiPage runat='server' Width='100%'></{0}:MultiPage>")]
[Designer(typeof(MultiPageDesigner))]
public class MultiPage : Control, IPostBackEventHandler, INamingContainer
{
//...
public string GetHtml()
{
System.IO.StringWriter sw = new System.IO.StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);
this.RenderControl(hw);
return sw.ToString();
}
//...
}

[DefaultProperty("Text"), ToolboxData("<{0}:PageView runat='server' Width='100%'></{0}:PageView>")]
public class PageView : Panel {...}

使用时的HTML源代码:
<cc1:MultiPage id="MultiPage1" runat="server" Width="100%">
<cc1:PageView id="PageView1" runat="server" Width="100%"></cc1:PageView>
</cc1:MultiPage>
saucer 2003-08-04
  • 打赏
  • 举报
回复
care to show your code? or see the last few examples in

http://samples.gotdotnet.com/quickstart/aspplus/doc/webctrlauthoring.aspx
uno 2003-08-04
  • 打赏
  • 举报
回复
昏倒……居然只多了个GZ
-_-0
  • 打赏
  • 举报
回复
GZ!
uno 2003-08-04
  • 打赏
  • 举报
回复
我试试看
Designer已经翻来覆去研究了n遍
Editor、Builder不知道会不会有突破口
wolve 2003-08-04
  • 打赏
  • 举报
回复
楼主研究一下editor,designer,builder。
解析子控件的工作在builder中完成。
AddParsesSubObject的作用是把经builder解析正常后生成的控件添加到controls中
uno 2003-08-04
  • 打赏
  • 举报
回复
我敢说,你那位仁兄写的控件,一定不支持控件嵌套
houjianxun 2003-08-04
  • 打赏
  • 举报
回复
这是一个朋友曾经开发过的分页控件,

设计部分的代码就这么简单
uno 2003-08-04
  • 打赏
  • 举报
回复
这个方法当然重写了,在这里面返回一段简单的HTML代码是没有问题的,可我想返回的是嵌套的子控件HTML……怎么做?
houjianxun 2003-08-04
  • 打赏
  • 举报
回复
Pager是控件类
houjianxun 2003-08-04
  • 打赏
  • 举报
回复
/// <summary>
/// 获取用于在设计时表示关联控件的 HTML。
/// </summary>
/// <returns>用于在设计时表示控件的 HTML。</returns>
public override string GetDesignTimeHtml()
{

wb=(Pager)Component;
wb.RecordCount=225;
StringWriter sw=new StringWriter();
HtmlTextWriter writer=new HtmlTextWriter(sw);
wb.RenderControl(writer);
return sw.ToString();
}
uno 2003-08-04
  • 打赏
  • 举报
回复
看来不是Parse的问题,设计时每一个自定义控件的设计时类都有响应,现在是找不到一个在设计时在父控件实例中创建子控件呈现结果的方法

uno 2003-08-04
  • 打赏
  • 举报
回复
up

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧