代码之家  ›  专栏  ›  技术社区  ›  Jesse Hallam

验证ITemplate中的表单字段

  •  0
  • Jesse Hallam  · 技术社区  · 17 年前

    我有一个自定义控件,其中包含以下定义的属性:

    [PersistenceMode(PersistenceMode.InnerProperty)]
    public ITemplate Template { 
      get { return template; }
      set { template = value; }
    }
    

    该控件覆盖了CreateChildControls(),并添加了几个HtmlGenericControls和一个asp:Panel控件。

    控件的实际实现看起来像这样:

    <user:Frame runat="server">
       <Template>
          <asp:Literal runat="server" ID="SomeControl" Text="SomeValue" />                  
       </Template>
    </user:Frame>
    

    虽然页面按预期呈现,但它有许多严重程度不同的后果,包括:

    是否有更好的方法来设计我的自定义控件?或者,也许只是让验证发挥作用的一种方式?

    2 回复  |  直到 17 年前
        1
  •  1
  •   codemonkeh    17 年前

    默认情况下,框架假设您在一个控件中可能有多个模板,比如在Repeater中。在您的情况下,您必须使用TemplateInstance属性告诉它您打算使用单个模板。例如

    [PersistenceMode(PersistenceMode.InnerProperty)]
    [TemplateInstance(TemplateInstance.Single)]
    public ITemplate Template { 
      get { return template; }
      set { template = value; }
    }
    

    这将允许您直接引用模板控件,并应解决您的验证问题。

        2
  •  1
  •   eulerfx    17 年前

    var c = parentControl.FindControl("id");
    
    parentControl.Controls.AddAt(
       parentControl.Controls.IndexOf(c) + 1,
       new RequiredFieldValidator() { ControlToValidate = c.D });
    
    推荐文章