用户控件的问题(继承自Menu类)

hsxgodkiller 2009-11-24 04:08:08
ASP.NET提供的Menu控件,放在页面上,渲染出来的标签都是<span>,我想让它变成<li>

于是我写了个控件类,继承自Menu,但是貌似怎么改,都没有反应,重写的Render、RenderContents、RenderBeginTag、TagKey这些内容,在页面渲染控件的过程中都没有被调用,请问高手们,如何能实现我需要的东西(仅仅以继承Menu类的方式实现)?

...全文
159 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
hsxgodkiller 2009-11-25
  • 打赏
  • 举报
回复
非常感谢大家回复,办法实在没有太好的,准备自己写个简单的控件了,专门做导航用的,生成lu和li标签来显示,来者都有分,但是没有解答超级好的,就不送大分了哈,见谅。
hsxgodkiller 2009-11-25
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 jshi123 的回复:]
1. Menu render 出来的html代码,外面是 <table>表框架,里面是 <a>超连接,搂主是在哪里看到 <span>的?你要改成 <li>的用意是什么?因为连接都是嵌在 <td>单元格里,即使改成 <li>, 也不一定能达到你想要的效果哦。

2. Menu在Render时,会调用的MenuItem的Render方法,Menu本身只负责生成外面的 <table>框架代码,里面具体的菜单项html代码是每个 menuitem 自己生成的。
如果你要改的是菜单项生成的内容,就要改menuitem的render方法,而MenuItem类是sealed,所以根本无法继承。
我以前也遇到这样的问题,想修改菜单生成的html代码,想了很多办法,试过用Control Adapter,也试过用反射去篡改MenuItem的render方法,发现这些都不是容易做的,最后还是想了个最简单的办法,用Menu本身的DynamicItemTemplate 和 StaticItemTemplate,虽然改不了外面的框架html代码,但是配合css和用 jquery,也达到了想要的目的。


[/Quote]

恩,你说的第二点我很认同,我也这么做了,但是觉得在它自动生成的标签上还是不够规范,所以考虑自己写一个了,但是第一个,我这里的Menu生成的内容,是<div>标签里面嵌套的<span>而不是像大多数的控件生成的是table的内容。
huangguochou 2009-11-25
  • 打赏
  • 举报
回复
直接用第三方的菜单控件,还不是效果更好。
jshi123 2009-11-25
  • 打赏
  • 举报
回复
1. Menu render 出来的html代码,外面是<table>表框架,里面是<a>超连接,搂主是在哪里看到<span>的?你要改成<li>的用意是什么?因为连接都是嵌在<td>单元格里,即使改成<li>, 也不一定能达到你想要的效果哦。

2. Menu在Render时,会调用的MenuItem的Render方法,Menu本身只负责生成外面的<table>框架代码,里面具体的菜单项html代码是每个 menuitem 自己生成的。
如果你要改的是菜单项生成的内容,就要改menuitem的render方法,而MenuItem类是sealed,所以根本无法继承。
我以前也遇到这样的问题,想修改菜单生成的html代码,想了很多办法,试过用Control Adapter,也试过用反射去篡改MenuItem的render方法,发现这些都不是容易做的,最后还是想了个最简单的办法,用Menu本身的DynamicItemTemplate 和 StaticItemTemplate,虽然改不了外面的框架html代码,但是配合css和用 jquery,也达到了想要的目的。

happy664618843 2009-11-24
  • 打赏
  • 举报
回复
重写方法
base.Render();
hsxgodkiller 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 keyake863 的回复:]
需要重写这个方法
protected override void Render(HtmlTextWriter writer)
{


}
[/Quote]


这个方法我重写了的,但是没什么作用
keyake863 2009-11-24
  • 打赏
  • 举报
回复
需要重写这个方法
protected override void Render(HtmlTextWriter writer)
{


}
hsxgodkiller 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 lcl_data 的回复:]
引用 3 楼 lcl_data 的回复:
你配置了吗?在web.config里面

或者<%@ Register TagPrefix="self" Namespace="HelloMyControl" Assembly="HelloMyControl" %>
[/Quote]

这个是你添加用户控件的时候,会自己生成的,如果没有会报错的
hsxgodkiller 2009-11-24
  • 打赏
  • 举报
回复
//base.Render(writer);
writer.RenderBeginTag(HtmlTextWriterTag.U);
writer.Write("asdfasdfasdf");
writer.RenderEndTag();
这是我Render里面写的部分东西,但是没效果出来,显示的仍然是他自己的东西,另外,我希望继承其他所有Menu控件本身的东西,只是想把<span>标签改成<li>
十八道胡同 2009-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lcl_data 的回复:]
你配置了吗?在web.config里面
[/Quote]
或者<%@ Register TagPrefix="self" Namespace="HelloMyControl" Assembly="HelloMyControl" %>
十八道胡同 2009-11-24
  • 打赏
  • 举报
回复
你配置了吗?在web.config里面
手抓宝 2009-11-24
  • 打赏
  • 举报
回复
在Render中吧base.Render(writer);干掉,然后写自己的RenderBeginTag
SATAN1122 2009-11-24
  • 打赏
  • 举报
回复
不懂·纯帮顶

62,074

社区成员

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

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

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

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