【发布时间】:2009-10-15 14:23:22
【问题描述】:
之所以提出这个问题,是因为我之前没有代理最佳实践方面的经验
我在 html 中有一个无序列表,整个网站的结构都相同,但列表的内容可能不同。
示例:
对象A列表
<ul>
<li>
<ul>
<li>A.someMember1</li>
<li>A.someMember2</li>
<li>A.someMember3</li>
</ul>
</li>
</ul>
对象B列表
<ul>
<li>
<ul>
<li>B.someMember1</li>
<li>B.someMember2</li>
<li>B.someMember3</li>
<li>B.someMember4</li>
</ul>
</li>
</ul>
我创建了两个代表:
protected delegate void RenderHtmlMethod(HtmlTextWriter writer);
protected delegate void RenderHtmlMethodWithObjects(HtmlTextWriter writer, object obj);
还有下面的方法
private void RenderList(HtmlTextWriter writer, string title, RenderHtmlMethod headingDelegate,
RenderHtmlMethodWithObjects itemsDelegate, object objToRender)
{
writer.RenderBeginTag(HtmlTextWriterTag.Fieldset);
writer.RenderBeginTag(HtmlTextWriterTag.Legend);
writer.HtmlEncode(title);
writer.RenderEndTag();//end Legend
writer.AddAttribute(HtmlTextWriterAttribute.Class, "resultList");
writer.RenderBeginTag(HtmlTextWriterTag.Ul);
{
headingDelegate(writer);
itemsDelegate(writer, objToRender);
}
writer.RenderEndTag();//ul
writer.RenderEndTag(); //fieldset
}
这样,我可以创建渲染标题的方法(只是另一个带有嵌入 ul 的 li),然后为每个对象列表渲染必要的列表项。
我无法重新定义我的类来实现任何接口,不过,我可以为这些类创建一个包装器并在那里实现渲染方法。您对此有何看法?
我的结构有意义吗?还是我疯了?
【问题讨论】:
-
我们可以给标签投票吗?
-
“投票赞成”是什么意思?
-
你可以用它来投票;)
-
+1 表示 am-i-insane 标签。我个人会使用 UserControl 而不是自定义控件,但我认为您对委托的使用没有任何反对意见。
-
@Gabe Moothart:我个人会使用 UserControl 而不是自定义控件您会以何种方式使用 UserControl?带中继器?