首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证ITemplate中的表单字段

验证ITemplate中的表单字段
EN

Stack Overflow用户
提问于 2009-03-13 04:23:59
回答 2查看 406关注 0票数 0

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

代码语言:javascript
复制
[PersistenceMode(PersistenceMode.InnerProperty)]
public ITemplate Template { 
  get { return template; }
  set { template = value; }
}

该控件重写CreateChildControls(),并添加几个HtmlGenericControls和一个asp:Panel控件。

控件的实际实现如下所示:

代码语言:javascript
复制
<user:Frame runat="server">
   <Template>
      <asp:Literal runat="server" ID="SomeControl" Text="SomeValue" />                  
   </Template>
</user:Frame>

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

模板中包含的

  • 控件不能直接引用,需要FindControl。这很好。
  • 我无法对它们使用验证控件。

是否有更好的方法来设计我的自定义控件?或者仅仅是一种让验证有效的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-16 05:12:56

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

代码语言:javascript
复制
[PersistenceMode(PersistenceMode.InnerProperty)]
[TemplateInstance(TemplateInstance.Single)]
public ITemplate Template { 
  get { return template; }
  set { template = value; }
}

这将允许您直接引用模板化控件,并且也应该修复您的验证问题。

票数 1
EN

Stack Overflow用户

发布于 2009-03-16 05:28:43

在这种情况下,获得验证的一种方法是以编程方式添加验证控件。例如:

代码语言:javascript
复制
var c = parentControl.FindControl("id");

parentControl.Controls.AddAt(
   parentControl.Controls.IndexOf(c) + 1,
   new RequiredFieldValidator() { ControlToValidate = c.D });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/641453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档