Группы проверки ASP.NET 3.5 не работают - PullRequest
1 голос
/ 20 мая 2011

Хотелось бы вставить в мою разметку, но она слишком сложная и содержит много ссылок на название компании клиента. Я надеюсь, что кто-то с огромным опытом сможет направить меня в правильном направлении.

У нас есть главная страница с ValidationSummary, которая не является частью группы проверки. На нашей странице содержимого у нас есть еще одна ValidationSummary, которая назначена группе проверки с именем ValReject. На странице содержимого также есть CustomValidator, который использует ClientValidationFunction и кнопку, обе из которых также назначены ValReject.

Когда я нажимаю кнопку, клиентская функция выполняется один раз, но об ошибках выдается как сводная информация о проверке, так и на странице с контентом и на главной странице. Я даже добавил третью сводку проверки и установил для ее группы что-то вроде «asdf», но также сообщается, что все три сводки проверки показывают одинаковую ошибку на странице.

Затем я создал отдельный тестовый проект ASP.NET, вставил весь код и запустил его, и он проверил, как и должно.

Затем я поиграл с AutoEventWireup на странице контента. Когда я устанавливаю значение false, проверка работает, но событие загрузки страницы не срабатывает. Что с этим?

Я знаю, что вам, вероятно, нужны примеры кода, но, как я уже сказал, я просто не могу сделать это без огромной головной боли (поверьте мне, разметка главной страницы и страницы контента огромна.

Вопрос здесь таков: есть ли у кого-нибудь представление о том, что может привести к тому, что один валидатор будет сообщать ВСЕ итоги валидации на странице, даже если только один из них имеет ту же группу валидации, что и валидатор и кнопка?

edit: Когда я вставил разметку в мое тестовое приложение, мне пришлось удалить некоторые теги, чтобы заставить его работать, так как тестовое приложение не имеет ссылок на некоторые сборки, используемые настоящей главной страницей. Некоторые вещи, которые я удалил:

<%@ Register Assembly="RadMenu.Net2" Namespace="Telerik.WebControls" TagPrefix="radM" %>

<radM:RadMenu ID="RadMenu1" runat="server" DataSourceID="smdsMenu" Skin="CssGrey" ClickToOpen="True" EnableViewState="False" CausesValidation="false" />

Таким образом, тот факт, что он работает в моем тестовом приложении, приводит меня к выводу, что мы делаем что-то в нашем производственном приложении, а я - в своем тестовом приложении. Да, я знаю, что это расплывчато, но, возможно, у кого-то в голове погаснет лампочка.

Ответы [ 3 ]

3 голосов
/ 20 мая 2011

Человек, после нескольких часов вращения моих колес, я наконец понял это. Мы используем этот метод расширения, чтобы отключить двойное нажатие кнопок:

    public static void DisableDoubleClick(this Button Control)
    {
        System.Text.StringBuilder sb = new System.Text.StringBuilder();

        sb.Append("if (typeof(Page_ClientValidate) == 'function') { ");
        sb.Append("if (Page_ClientValidate() == false) { return false; }} ");
        sb.Append("this.disabled = true;");
        sb.Append(Control.Page.ClientScript.GetPostBackEventReference(Control, ""));
        sb.Append(";");
        Control.Attributes.Add("onclick", sb.ToString());
    }

Это то, что испортило проверку, так как она вызывала глобальную проверку. Я исправил это, сделав следующее изменение:

        sb.Append(string.Format("if (Page_ClientValidate({0}) == false) {{ return false; }}}} ",
            Control.ValidationGroup == string.Empty ? string.Empty : string.Format("\"{0}\"", Control.ValidationGroup)));

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

Я никого не обвиняю в том, что не ответил из-за нехватки подробностей, но я буду продолжать это на тот случай, если кто-то еще сможет его использовать.

edit : Благодаря slfan и gbs. Я только что выяснил проблему и возвращался сюда, чтобы опубликовать свой ответ, когда я вижу, что вы двое по существу решали мою проблему с обеих сторон проблемы. Событие загрузки страницы - это место, где происходило связывание, а вызываемый метод расширения портил функцию Page_ClientValidate. Поскольку вы оба технически правы, и я не могу наградить вас обоих ответом, я надеюсь, что никто не расстроится, если я отмечу свой ответ как здесь. Вы двое определенно хороши в анализе таких проблем с минимальными деталями и без примеров кода. Реквизит.

1 голос
/ 20 мая 2011

Две вещи, которые я бы искал:

1: любая внешняя проверка с использованием Page_ClientValidate выполняется в javascript

2: Любой явный вызов Page.Validate () в коде позади

1 голос
/ 20 мая 2011

AutoEventWireup заставляет ASP.NET автоматически вызывать событие Page_Load без необходимости регистрироваться в событии.Альтернативой может быть переопределение метода OnLoad.Кажется, ваша страница работает правильно, когда Page_Load не вызываетсяЧто вы делаете внутри этого метода?Какие-то странные привязки данных?Что если вы раскомментируете этот код, будет ли он работать тогда?Таким образом, вы можете сузить свою проблему до реальной проблемы, которую вы не показываете в своем вопросе.

...