Пользовательский элемент управления не запускает проверку - PullRequest
1 голос
/ 04 июня 2010

Я написал собственный элемент управления ASP.net, который происходит от LinkButton и переопределяет метод Render (). Я использую его для замены кнопок ImageButton на сайте, над которым я работаю, поэтому нам не нужно иметь изображение для каждой кнопки.

Этот элемент управления работает нормально, выполняет необходимые постбэки и т. Д., Однако он не запускает валидаторы в своей группе валидации. Это, очевидно, проблема.

Код для управления (сокращенно) выглядит следующим образом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public class CustomButton : LinkButton
{
    public string SpanCssClass { get; set; }
    protected override void Render(HtmlTextWriter writer)
    {
        if (!Visible)
        {
            return;
        }

        writer.AddAttribute(HtmlTextWriterAttribute.Name, UniqueID);
        writer.AddAttribute(HtmlTextWriterAttribute.Id, ClientID);
        writer.AddAttribute(HtmlTextWriterAttribute.Class, CssClass);
        string postback = string.IsNullOrEmpty(OnClientClick) ? "javascript:__doPostBack('" + UniqueID + "','');" : OnClientClick;
        writer.AddAttribute(HtmlTextWriterAttribute.Href, postback);
        writer.RenderBeginTag(HtmlTextWriterTag.A);

        writer.AddAttribute(HtmlTextWriterAttribute.Class, SpanCssClass);
        writer.RenderBeginTag(HtmlTextWriterTag.Span);

        writer.Write(Text);

        writer.RenderEndTag();
        writer.RenderEndTag();
    }
}

Кто-нибудь знает, почему это не вызывает срабатывание валидаторов?

У меня сложилось впечатление, что если оставить все другие методы в LinkButton без изменений, все остальные функции останутся прежними!

Ответы [ 2 ]

1 голос
/ 15 июня 2010

Проблема в том, что вы генерируете свой собственный скрипт, разрешите asp.net сделать это за вас, и он должен работать лучше. Примерно так будет работать лучше.

PostBackOptions options = new PostBackOptions(this);
options.PerformValidation = true;
options.RequiresJavaScriptProtocol = true;

string postback = string.IsNullOrEmpty(OnClientClick) ? this.Page.ClientScript.GetPostBackEventReference(options) : OnClientClick;
0 голосов
/ 04 июня 2010

Что ж, если вы хотите запустить проверку вручную, если CausesValidation имеет значение true, вы можете вызвать метод Page_Validate на стороне клиента для запуска проверки. Я думаю, что требуется один параметр, группа проверки, чтобы проверить ...

НТН.

...