C# 正在从父页验证ASP.NET用户控件
我有一个带有按钮的asp.net页面。此按钮生成用户控件并将其插入页面,因此一个页面上可能存在多个控件。我需要验证生成的控件中是否存在某个动态生成的控件 所以..页面有0到N个控件1。每个控件1可以有0到N个控件2。当在页面上单击SaveButton时,我需要确保每个Control1中至少有一个Control2 我目前有两种选择: •为生成的每个控件动态插入CustomValidator,每个控件将验证一个控件1 •手动执行验证(使用jQuery),从SaveButton.OnClientClick调用验证函数 两者都有各自的缺点——这就是为什么我要和大家分享这一点。我是否错过了简单的解决方案C# 正在从父页验证ASP.NET用户控件,c#,asp.net,validation,user-controls,custom-controls,C#,Asp.net,Validation,User Controls,Custom Controls,我有一个带有按钮的asp.net页面。此按钮生成用户控件并将其插入页面,因此一个页面上可能存在多个控件。我需要验证生成的控件中是否存在某个动态生成的控件 所以..页面有0到N个控件1。每个控件1可以有0到N个控件2。当在页面上单击SaveButton时,我需要确保每个Control1中至少有一个Control2 我目前有两种选择: •为生成的每个控件动态插入CustomValidator,每个控件将验证一个控件1 •手动执行验证(使用jQuery),从SaveButton.OnClientCli
提前谢谢。。(顺便说一句,任何达到或包括.NET 3.5 SP1的内容都是公平的)您可以尝试的一种方法是创建和维护一个简单的xml结构,该结构表示您的自定义控件层次结构。无论何时创建或销毁自定义用户控件,都可以从此结构中插入或删除。保存后,验证xml结构中表示的控件层次结构是否正确。您可以将xml保存在会话对象中,以便在回发过程中保持它。如果您正在动态添加用户控件,则可以使用验证函数使每个控件实现相同的接口。这样,您就可以将控件加载到页面上每个父控件的占位符中。提交页面时,只需循环占位符中的控件,将它们转换为接口类,然后调用validate函数。我不使用自定义验证器,但您可以使用validate函数返回的对象建立验证错误列表,您可以以任何方式呈现此验证错误集合。嗯,我喜欢digiguru建议的接口想法,但我会使用容器控件1上的接口,而不是子控件,因为它似乎是代码存在的更符合逻辑的地方。以下是我的看法:
public interface IValidatableControl
{
bool IsValidControl();
}
然后在控件1上实现此操作
public class Control1 : IValidatableControl
{
... Other methods
public bool IsValidControl()
{
foreach(object c in this.Controls)
{
if(c.GetType() == "Control2")
return true;
}
return false;
}
}
写这篇文章可能有更好的方法,但它应该会给你足够的想法来开始。我认为你可以在Control1中指定一个公共属性,该属性引用Control2的ID的存在,然后用ValidationProperty装饰Control1的类。我的想法是这样的:
[ValidationProperty("Control2Ref")]
public partial class Control1 : UserControl
{
public string Control2Ref
{
get { return FindControl("Control2"); }
}
// rest of control 1 class
}
然后您应该能够将RequiredFieldValidator指向Control1的一个实例。这是一个好主意,它可以更好地设计页面。谢谢:)您应该使用ASP.Net中的IValidator接口,它提供IsValid、Validate和ErrorMessage。验证器应该实现它,在Init触发器中,您需要调用Page.Validators.Add(这个)。