C# 带有Html内容占位符的ASP.NET通用用户控件
这个问题可能已经被问过了,但我找不到任何参考资料,所以如果这个问题看起来像是重复的,我很抱歉 我想做的是创建一个通用的C# 带有Html内容占位符的ASP.NET通用用户控件,c#,jquery,asp.net,C#,Jquery,Asp.net,这个问题可能已经被问过了,但我找不到任何参考资料,所以如果这个问题看起来像是重复的,我很抱歉 我想做的是创建一个通用的对话框作为ASP.NET用户控件;它将包含使用jQuery创建对话框所需的所有脚本。对话框有一组固定的按钮,但我希望能够让用户在创建对话框时定义内容。假设这是用户控件的标记: <head> <script type="text/javascript"> // jQuery script to create the dialo
对话框作为ASP.NET用户控件;它将包含使用jQuery
创建对话框所需的所有脚本。对话框有一组固定的按钮,但我希望能够让用户在创建对话框时定义内容。假设这是用户控件的标记:
<head>
<script type="text/javascript">
// jQuery script to create the dialog
</script>
</head>
<body>
<div runat="server" id="divContainer">
<!--Html Content Placeholder. What goes here?-->
</div>
</body>
非常感谢您的帮助。我不确定这是否是正确的方法,我在对话框控件中添加了一个ITemplate,并放置了一个HtmlGenericControl容器,该容器是带有runat=“server”的Div-control
现在,您可以在此容器中添加html控件和文本
<cc1:UCDialogBox ID="dialog" runat="server">
<HtmlPlaceHolder>
<div runat="server">
<h1>Title</h1>
<h2>Description</h2>
<div>Modal Content</div>
</div>
</HtmlPlaceHolder>
</cc1:UCDialogBox>
奇怪的是,将HTML控件放在用户控件的主体中不会导致运行时错误。事实上,这些控件的效果很好。我想这只是设计师的抱怨
至于占位符,我不必使用任何特定的控件;我只是使用HtmlTextWriter
在标记中调用的方法内将控件呈现为格式良好的HTML字符串:
<div runat="server" id="divContainer">
<%# RenderContents() %>
</div>
它工作得很好。重写Render()
的问题是页面上还有其他控件,我不想强制手动渲染。使用List
确实有效,只是设计师在抱怨。谢谢你!
<SomePlaceholderControl DataSource="<%# Contents %>" />
<cc1:UCDialogBox ID="dialog" runat="server">
<HtmlPlaceHolder>
<div runat="server">
<h1>Title</h1>
<h2>Description</h2>
<div>Modal Content</div>
</div>
</HtmlPlaceHolder>
</cc1:UCDialogBox>
public class UCDialogBox : WebControl, INamingContainer
{
private ITemplate htmlPlaceHolder = null;
[
Browsable(false),
DefaultValue(null),
Description("Add your html contorls"),
PersistenceMode(PersistenceMode.InnerProperty)
]
public virtual ITemplate HtmlPlaceHolder
{
get
{
return htmlPlaceHolder;
}
set
{
htmlPlaceHolder = value;
}
}
protected override void Render(HtmlTextWriter output)
{
HtmlGenericControl placeholder = new HtmlGenericControl();
htmlPlaceHolder.InstantiateIn(placeholder);
var html = placeholder.Controls[1] as System.Web.UI.HtmlControls.HtmlGenericControl;
var result = html.InnerHtml.Replace("\r", "").Replace("\n", "").Trim();
output.Write(result);
}
}
<div runat="server" id="divContainer">
<%# RenderContents() %>
</div>
public string RenderContents()
{
StringWriter writer = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(writer);
foreach (var control in Contents)
{
control.RenderControl(htmlWriter);
}
return writer.ToString();
}