摘要
大家好,
好的,继续我的自定义控件之旅……
总而言之,我已经了解了三个主要的自定义控件“类”。如果这里有任何错误,请随时纠正我!
我的想法..
好的,在使用自定义组合时,我发现了以下内容:
everywhere.
问题..
所以,我承认,我是新手,所以我可能会对上面提到的一些观点大错特错。
你使用Composites?
这件事我很想牢记在心,因为我知道 good 控件开发可以在多大程度上缩短整体开发时间。
我期待着你的回答^_^
发布于 2008-08-20 07:53:32
我说继续使用自定义呈现控件。我发现在大多数情况下,在UserControl中可以更容易地完成和使用合成,但除此之外,您需要有更好的控制程度(双关语意外),以配得上您自己的呈现策略。
也许有一些控件足够简单,值得使用复合控件(例如,textbox与基于javascript/dhtml的datepicker相结合),但除此之外,自定义呈现控件看起来是可行的。
发布于 2008-08-20 13:18:31
下面是我用于自定义渲染的另一个扩展方法:
public static void WriteControls
(this HtmlTextWriter o, string format, params object[] args)
{
const string delimiter = "<2E01A260-BD39-47d0-8C5E-0DF814FDF9DC>";
var controls = new Dictionary<string,Control>();
for(int i =0; i < args.Length; ++i)
{
var c = args[i] as Control;
if (c==null) continue;
var guid = Guid.NewGuid().ToString();
controls[guid] = c;
args[i] = delimiter+guid+delimiter;
}
var _strings = string.Format(format, args)
.Split(new string[]{delimiter},
StringSplitOptions.None);
foreach(var s in _strings)
{
if (controls.ContainsKey(s))
controls[s].RenderControl(o);
else
o.Write(s);
}
}
然后,为了在RenderContents()方法中呈现自定义组合,我编写了以下代码:
protected override void RenderContents(HtmlTextWriter o)
{
o.WriteControls
(@"<table>
<tr>
<td>{0}</td>
<td>{1}</td>
</tr>
</table>"
,Text
,control1);
}
发布于 2008-08-20 19:44:36
罗伯,你说得对。我提到的方法是一种混合方法。拥有ascx文件的好处是,在我见过的每个项目中,设计人员都会感到最舒服的是编辑实际的标记,以及你和设计师可以单独工作的ascx。如果您不打算稍后对控件本身进行实际的CSS/标记/设计更改,则可以使用自定义呈现控件。正如我所说的,我的方法只适用于更复杂的场景(而这些场景可能就是您需要设计师的地方:)
https://stackoverflow.com/questions/17532
复制相似问题