如何以编程方式将ASCX中的ASP.NET控件添加到外部RequiredFieldValidator?

时间:2022-01-26 07:52:48

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();这适合我。