代码之家  ›  专栏  ›  技术社区  ›  NightOwl888 Jabrwoky

ASP.NET自定义模板控件-是否有方法修改数据绑定数据输出到的位置?

  •  1
  • NightOwl888 Jabrwoky  · 技术社区  · 15 年前

    基本上,我有一个带有自定义数据容器类的自定义模板控件。当开发人员将my控件的实例添加到页面时,他们可以在LayoutTemplate中定义自己喜欢的控件,如下所示:

        <ml:MyControl id="MyControl1" runat="server">
            <LayoutTemplate>
                <span><%#Container.ErrorMessage%></span>
            </LayoutTemplate>
        </ml:MyControl>
    

    此示例在页面上呈现如下:

    <span id="MyControl1"><span>
                <span>ml_errormessage</span>
    
            </span></span>
    

    我希望我的控件自动移动“ml\u errormessage”(来自容器.ErrorMessage-属性中的硬编码标记)作为其包含元素的类,以使jQuery更容易使用选择器查找元素并在客户端动态插入错误消息。更重要的是,我希望它移开,这样类名就不会被内容替换,jQuery可以在页面生命周期中找到它所需要的任意次数。换句话说,我希望输出看起来像这样,而不需要开发人员更改输入模板或在模板中使用自定义控件:

    <span id="MyControl1"><span>
                <span class="ml_errormessage"></span>
    
            </span></span>
    

    {System.Web.UI.DataBoundLiteralControl}
    System.Web.UI.DataBoundLiteralControl: {System.Web.UI.DataBoundLiteralControl}
    AppRelativeTemplateSourceDirectory: "~/"
    BindingContainer: {MyControls.MyControlData}
    ClientID: "MyControl1_ctl01_ctl00"
    Controls: {System.Web.UI.EmptyControlCollection}
    EnableTheming: True
    EnableViewState: True
    ID: "ctl00"
    NamingContainer: {MyControls.MyControlData}
    Page: {ASP.default_aspx}
    Parent: {MyControls.MyControlData}
    Site: Nothing
    SkinID: ""
    TemplateControl: {ASP.default_aspx}
    TemplateSourceDirectory: "/MyControls"
    UniqueID: "MyControl1$ctl01$ctl00"
    Visible: True
    

    如您所见,“ml\u errormessage”值不存在。在使用Reflector分析控件类的DataBind事件之后,我看到它将绑定行为委托给每个控件。换句话说,每个控件处理自己的数据绑定。但是,由于我无法预先知道模板中将包含哪些控件类型,因此如何进行此更改?

    另一方面,有没有一种简单的方法可以让控件的输出缩进,以便在调试期间易于阅读?

    1 回复  |  直到 15 年前
        1
  •  1
  •   NightOwl888 Jabrwoky    15 年前

    发布这篇文章几秒钟后,我想到了一个简单的解决方案…简单的硬代码 "<span class=""ml_errormessage""></span>"

    当然,它增加了一个额外的不必要的 <span>

    推荐文章