I have a drop-down list inside a user control (ASCX) that I want to validate from the page on which I've placed the ASCX, but when I set the ControlToValidate to the drop-down list the page complains that it can't be found. Thanks for any help/suggestions.
我在用户控件(ASCX)中有一个下拉列表,我想从我放置ASCX的页面进行验证,但是当我将ControlToValidate设置到下拉列表时,该页面会抱怨它可以'找到了。感谢您的任何帮助/建议。
3 个解决方案
#1
Expose the dropdown list with a public property in your user control:
在用户控件中公开带有公共属性的下拉列表:
public DropDownList DropDownToValidate
{
get
{
return ddlTest;
}
}
Then use the UniqueID of the exposed Dropdown to set the control to validate in the page load of the page on which you dropped the user control:
然后使用公开的Dropdown的UniqueID将控件设置为在删除用户控件的页面的页面加载中进行验证:
protected void Page_Load(object sender, EventArgs e)
{
RequiredFieldValidator1.ControlToValidate = WebUserControl1.DropDownToValidate.UniqueID;
}
#2
The only way I know to do this is to do this in your user control class:
我知道这样做的唯一方法是在用户控件类中执行此操作:
[ValidationProperty("Foo")]
public class MyUserControl : UserControl
{
public string Foo
{
get { return(yourDropDown.SelectedValue); }
}
}
And then in the page you place the user control on:
然后在页面中放置用户控件:
<asp:RequiredFieldValidator ControlToValidate="yourUserControlName" runat="server" ErrorMessage="You are required to make a selection" />
Not quite the same thing, but that's the only workaround that I know.
不太一样,但这是我所知道的唯一解决方法。
#3
I think the best way to validate user control is to have public method inside your user control:
我认为验证用户控件的最佳方法是在用户控件中使用公共方法:
public void Validate() {
reqRecipientName.Validate();
reqRecipientMail.Validate();
valRecipientMail.Validate();
reqRecipientPhone.Validate();
}
where reqRecipientName
, reqRecipientMail
... are ID of validators (they are also insice ascx). And then on Page inside submit method call controlId.Validate();
This works for me.
其中reqRecipientName,reqRecipientMail ...是验证器的ID(它们也是insice ascx)。然后在Page里面提交方法调用controlId.Validate();这适合我。
#1
Expose the dropdown list with a public property in your user control:
在用户控件中公开带有公共属性的下拉列表:
public DropDownList DropDownToValidate
{
get
{
return ddlTest;
}
}
Then use the UniqueID of the exposed Dropdown to set the control to validate in the page load of the page on which you dropped the user control:
然后使用公开的Dropdown的UniqueID将控件设置为在删除用户控件的页面的页面加载中进行验证:
protected void Page_Load(object sender, EventArgs e)
{
RequiredFieldValidator1.ControlToValidate = WebUserControl1.DropDownToValidate.UniqueID;
}
#2
The only way I know to do this is to do this in your user control class:
我知道这样做的唯一方法是在用户控件类中执行此操作:
[ValidationProperty("Foo")]
public class MyUserControl : UserControl
{
public string Foo
{
get { return(yourDropDown.SelectedValue); }
}
}
And then in the page you place the user control on:
然后在页面中放置用户控件:
<asp:RequiredFieldValidator ControlToValidate="yourUserControlName" runat="server" ErrorMessage="You are required to make a selection" />
Not quite the same thing, but that's the only workaround that I know.
不太一样,但这是我所知道的唯一解决方法。
#3
I think the best way to validate user control is to have public method inside your user control:
我认为验证用户控件的最佳方法是在用户控件中使用公共方法:
public void Validate() {
reqRecipientName.Validate();
reqRecipientMail.Validate();
valRecipientMail.Validate();
reqRecipientPhone.Validate();
}
where reqRecipientName
, reqRecipientMail
... are ID of validators (they are also insice ascx). And then on Page inside submit method call controlId.Validate();
This works for me.
其中reqRecipientName,reqRecipientMail ...是验证器的ID(它们也是insice ascx)。然后在Page里面提交方法调用controlId.Validate();这适合我。