интегрировать валидацию пользовательских элементов управления с Page.IsValid - PullRequest
1 голос
/ 06 июля 2011

Я создал пользовательский серверный элемент управления.Пока что этот элемент управления отображает HTML на веб-странице.При отправке страницы мне нужно взять значения, введенные в текстовое поле серверного элемента управления, и вызвать какой-либо веб-сервис для проверки ввода пользователя.я не хочу писать этот код в коде за страницей, на которой этот элемент управления используется. Я хочу, чтобы все проверки были записаны в самом элементе управления сервером, и если проверка завершится неудачно, Page.IsValid должен быть установлен в false.Если пользовательское значение ввода в элементе управления сервера является допустимым, Page.IsValid будет иметь значение true.

Я пытаюсь добиться того же функционала, что и Google recaptcha.Все, что нужно сделать пользователю, чтобы использовать этот элемент управления, это пользовательский элемент управления на странице.Введенное пользователем значение является правильным или неправильным, обрабатывается в самом элементе управления и в коде за страницей есть только Page.IsValid.Вот страница в Google, которая объясняет это

http://code.google.com/apis/recaptcha/docs/aspnet.html

, и я также использовал Google recaptcha, и он работает, как и ожидалось.Я также хочу создать такую ​​же функциональность для управления сервером. Пожалуйста, помогите, если это возможно.

Ответы [ 2 ]

1 голос
/ 07 июля 2011

Спасибо за ответы на вопросы. Я нашел решение. Вот весь код управления сервером. Хитрость была в том, чтобы реализовать IValidator. Это дает нам два свойства и один метод. Свойства ErrorMessage и IsValid и метод Validate. Я написал весь код проверки в методе Validate и установил this.IsValid. Это решило проблему.

[ToolboxData("<{0}:MyControl runat=server></{0}:MyControl>")]
public class MyControl : WebControl, IValidator
{
    protected override void RenderContents(HtmlTextWriter output)
    {
        //Render the required html
    }

    protected override void Render(HtmlTextWriter writer)
    {
        this.RenderContents(writer);
    }

    protected override void OnInit(EventArgs e)
    {
        Page.Validators.Add(this);
        base.OnInit(e);
    }

    public string ErrorMessage
    {
        get;
        set;
    }

    public bool IsValid
    {
        get;
        set;
    }

    public void Validate()
    {
        string code = Context.Request["txtCode"];
        this.IsValid = Validate(code);//this method calls the webservice and returns true or false
        if (!this.IsValid)
        {
            ErrorMessage = "Invalid Code";
        }
    }
}
0 голосов
/ 06 июля 2011

Вы можете включить валидатор в серверный элемент управления. Для вызова веб-службы потребуется метод проверки сервера.

Результатом будет серверный элемент управления, который вы перетаскиваете на страницу, другие валидаторы не нужны. если ваш элемент управления не может проверить его содержимое, тогда page.isvalid будет иметь значение false.

Simon

...