将用户控件作为变量传递

时间:2010-01-25 19:45:49

标签: c# asp.net user-controls

我正在写一个我称之为调查系统的东西。调查将包括一系列问题,分为几个部分。调查定义将存储在数据库中。问题可以是各种类型,具有不同的输入方法和验证(例如文本框,数字文本框,选择列表等)。我正在创建一组映射到不同问题类型的用户控件。我想从调查定义逻辑中完全抽象调查呈现逻辑。我认为我会这样做的方法是使用一个愚蠢的渲染控件,它只需要一组控件,然后在每个循环中将它们渲染成我正在做的超简化版本。

private void RenderControls()
{
    foreach (UserControl CurrentControl in this.ControlsToRender)
    {
        MyPlaceholder.Controls.Add(CurrentControl)
    }

}

这是因为正确的控件被添加到占位符,但是没有任何渲染。大概这是因为它在asxc文件中没有标记。

如果我做这样的事情

private void RenderControls()
{
    foreach (UserControl CurrentControl in this.ControlsToRender)
    {
        MyPlaceholder.Controls.Add(this.LoadControl("path to ascx file")
    }
}

它将创建正确数量的控件,但我不想在这里实例化控件,因为我需要根据cconditional逻辑设置各种属性,我想从这个纯渲染层中抽象出来。

我想要做的是实例化其他控件,设置相关属性,然后简单地将这些属性集合传递到渲染控件中以进行渲染。

有没有办法用户控件执行此操作?我是否必须改为创建自定义控件?

2 个答案:

答案 0 :(得分:1)

.ascx usercontrols很难用于可分发的便携式组件。有办法,但它们有很多限制,需要几个步骤。最后它不值得。

最好的办法是制作封装自己渲染的自定义控件。

答案 1 :(得分:0)

你可以做任何一件事,但听起来你可能想要使用自定义控件。

您可以通过在用户控件上公开属性来使用用户控件。

MyPlaceholder.Controls.Add(CurrentControl)

当你到达上面一行时,控件已经被实例化了。只需在实例化时设置这些属性,就应该进行设置。

或者你可以在渲染之前的任何时候设置属性