2011-01-28 4 views
3

У меня есть пользовательский элемент управления, который состоит из TextBox с несколькими дополнительными функциями, но для целей этого примера достаточно просто предположить, что это обычный TextBox. Я вызываю этот элемент управления пользователя из веб-формы и хочу иметь возможность использовать RequiredFieldValidator, который в основном будет работать так же, как если бы я использовал его в текстовом поле в веб-форме. Как настроить этот элемент управления для этого?Обработка RequiredFieldValidator внутри пользовательского элемента управления

EDIT:

DatePicker.ascx

<asp:TextBox runat="server" ID="myControlTB"> 

DatePicker.ascx.cs

[ValidationProperty("Text")] 
public partial class DatePicker : System.Web.UI.UserControl 
{ 
    public String Text { get { return myControlTB.Text; } set { myControlTB.Text = value; } } 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
} 

WebForm.aspx

<cu:UserControl runat="server" ID="myControl"> 
<asp:RequiredFieldValidator runat="server" errormessage="This is a required field." ControlToValidate="myControl"> 
<asp:Button ID="btnSubmit" runat="server" Text="Submit" onclick="btnSubmit_Click" /> 

WebForm.aspx.cs

protected void btnSubmit_Click(object sender, EventArgs e) 
{ 
    Page.Validate(); 
    if (Page.IsValid) 
    { 
     // e-mail the form 
    } 
+0

это похоже на мое, за исключением того, что у меня нет набора свойств, и мой валидатор появляется первым. Кроме того, в моем рабочем коде я вручную проверяю использование параметра Page.Validate() и проверяю Page.IsValid. Это может быть не слишком ваши требования, но может стоить проверить, работает ли это так, когда вы вызываете событие или метод, требующий проверки. –

+0

сделал снимок, но не повезло:/Thanks в любом случае. – Kyle

+0

hmmm, как ни странно, если я поместил Page_Validate() в метод Page_Load, это работает. К сожалению, это не помогает для проверки на стороне клиента. – Kyle

ответ

3

Вы должны установить атрибут ValidationProperty на контроль и выставить свойство Text Textbox как свойство управления

[ValidationProperty("Text")] 
public partial class Control 
{ 
    public string Text 
    { 
     get { return textbox.Text;} 
    } 

} 
+0

Не хотите звучать малообеспеченно, но могли бы вы привести пример? – Kyle

+0

Спасибо, но это не сработает. Я не получаю исключение, но требуемый идентификатор не правильно идентифицирует, что текстовое поле пуст. – Kyle

+0

Простите, прошло уже много времени с тех пор, как я это сделал. Позвольте мне проверить это и вернуться. Вы попробовали первый пример @ Брайана? –

0

Добавить свойство пользовательского элемента управления:

public string TextBoxID 
{ 
    get { return myControlTB.ClientID; } 
} 

А затем для управления проверки, programmably установить его из кода:

void Page_Load(..) 
{ 
    this.rfv.ControlToValidate = this.uc.TextBoxID; 
} 

На самом деле я не знаю, будет ли он работать таким образом, но вы также можете попробовать UniqueID или идентификатор напрямую и посмотреть, не изменилось ли это.

Либо это, либо измените TextBoxID на TextboxText, и верните myControlTB.Text и добавьте в элемент управления [ValidationProperty («TextBoxText»)] и установите ControlToValidate на обязательном поле проверки правильности для пользовательского элемента управления.

Попробуйте один из таких подходов,

HTH.

+0

Спасибо за помощь. Метод 1 не работает. Ни один из свойств идентификатора (UniqueID, ClientID, ID), похоже, не имеет правильного идентификатора.Я получаю исключение, говоря, что RequiredFieldValidator не может найти элемент управления. Метод 2 - это то же самое, что и @Paul, но я не смог получить эту работу. – Kyle

Смежные вопросы

 Смежные вопросы