Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.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# 带有Html内容占位符的ASP.NET通用用户控件_C#_Jquery_Asp.net - Fatal编程技术网

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();
}