Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用户控件中的内容_C#_Asp.net_User Controls_Servercontrols - Fatal编程技术网

C# 用户控件中的内容

C# 用户控件中的内容,c#,asp.net,user-controls,servercontrols,C#,Asp.net,User Controls,Servercontrols,我几乎不好意思问这个问题,但现在我们开始 我不是用户控制方面的专家,需要一些关于如何实现特定功能的设计建议 目标是拥有一个usercontrol,它将呈现为html元素和css的复杂结构,以形成一个优雅的容器框。问题在于如何填充框的内容,因为usercontrol的每个实例都有自己的HTML内容。usercontrol的content container div将嵌套在呈现的html结构的深处。以编程方式设置usercontrol的内容或使用属性是不可取的 在psuedo代码中,所需的语法如下:

我几乎不好意思问这个问题,但现在我们开始

我不是用户控制方面的专家,需要一些关于如何实现特定功能的设计建议

目标是拥有一个usercontrol,它将呈现为html元素和css的复杂结构,以形成一个优雅的容器框。问题在于如何填充框的内容,因为usercontrol的每个实例都有自己的HTML内容。usercontrol的content container div将嵌套在呈现的html结构的深处。以编程方式设置usercontrol的内容或使用属性是不可取的

在psuedo代码中,所需的语法如下:

<usercontrol Title="Some Title"><p>some random html content</p></usercontrol>
<uc:MyControl Title="Some TItle" runat="server">
    <ContentsTemplate>
        <p>some random html content</p>
    </ContentsTemplate>
</uc:MyControl>
一些随机html内容

呈现的usercontrol示例如下:

<div class="CommonBox">
    <div class="Title">Some Title</div>
    <div class="Content"><p>some random html content</p></div>
</div>

一些头衔
一些随机的html内容

我希望我的解释是充分的。这是否对任何人都有意义,或者所需的功能无法实现

干杯

编辑


我尝试了模板化的用户控制建议,希望得到一个合适的解决方案。我“后退”,现在有一个工作模板用户控件。我的下一个问题是,如何以编程方式访问嵌套在模板中的控件。。。假设示例链接的“Description”模板中有一个textbox控件,我想通过编程方式设置它的值?这可能吗

是的,这是很有可能的。控件中的属性将变成与示例中的“Title”类似的属性。然后,您可以使用扩展控件,为需要的其他html输入添加子节点


享受吧

你要找的肯定是可能的。一种解决方案是创建一个
模板化用户控件
。最后,您可以定义与示例外观类似的内容。比如:

<usercontrol Title="Some Title"><p>some random html content</p></usercontrol>
<uc:MyControl Title="Some TItle" runat="server">
    <ContentsTemplate>
        <p>some random html content</p>
    </ContentsTemplate>
</uc:MyControl>

一些随机的html内容


。我过去成功地做到了这一点。关于这个主题,还有很多参考资料。

看起来您需要两个属性用于自定义服务器控件

Title属性来呈现第一个内部div的内容

内容用于第二个。如果要在服务器控件内设置内容,应为属性使用
[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
属性,如下所示:

[PersistenceMode(PersistenceMode.InnerDefaultProperty)]
public string Contents
{
    get
    {
        string contents = (string)ViewState["Contents"];
        return (contents == null) ? String.Empty : contents;
    }
    set
    {
        ViewState["Contents"] = value;
    }
}
PersistenceModeAttribute在MSDN中的解释如下:

通过 InnerDefaultProperty参数 指定一个可视化设计器 应该保留要保存的属性 该属性作为内部属性应用 默认属性。这意味着 VisualDesigner保留该属性 在控件的标记中。这个 属性只能应用于一个 属性,因为只有一个属性 可以在控件的 标签。属性值不正确 包裹在一个特殊的标签里


有关更多信息,请查看。

我认为第二部分需要澄清,他希望在用户控件中包含任何内容,而不仅仅是特定对象。模板是一种很好的方法。我想知道是否有一种可靠且简单的方法可以做到这一点,而不必考虑在使用控件时是否可以节省一个级别的元素。使用自定义控件很容易,但我还没有真正尝试使用
.ascx
文件。@Matti:我认为您可以创建一个基类,例如
TemplatedUserControl
,它负责基本/常见功能。继承将是
MyControl
TemplatedUserControl
UserControl
。我已经将此方法用于其他常见的用户控件需求,效果非常好。@KP:不过,无论何时使用控件,您仍然需要
。在我看来,如果定制的装饰像,比如说,
,你可以把它放在你的东西周围,那将是最好的(免责声明:我不赞成使用asp:Panel)