Получить группу проверки, которая используется при обратной передаче

Я работаю с устаревшим проектом на С# (.NET 2.0). В этом проекте есть две группы проверки. Один для пользовательского управления входом в систему, а другой для отправки пользователями в информационный бюллетень. Проблема, с которой я столкнулся, заключается в том, что когда пользователь отправляет подписку на информационный бюллетень, в методе page_prerender() запускается некоторый пользовательский код, который должен запускаться только тогда, когда пользователь пытается войти в систему.

Я искал решение, позволяющее распознать, какая из двух групп используется при обратной передаче, чтобы я мог игнорировать пользовательский код, когда это необходимо. Моя идея состояла в том, чтобы попытаться проверить, какая из двух групп проверки используется для проверки. К сожалению, проведя несколько бесплодных часов в Google, я не смог найти ничего, что могло бы сообщить мне, как на самом деле узнать, какая группа проверки используется при проверке. Есть ли способ узнать?

<asp:Button ID="btn_newsletter" 
            runat="server" 
            Text="Verzend" 
            ValidationGroup="newsLetter" 
            meta:resourcekey="bnt_newsletter"
            OnClick="handleNewsLetter"
            CssClass="roundedButtonBig" 
 />


<asp:Button ID="LoginButton" 
            runat="server" 
            CommandName="Login" 
            Text="Inloggen" 
            ValidationGroup="lgnUser" 
            meta:resourcekey="LoginButtonResource1" 
            CssClass="roundedButtonBig" 
 />

Следующий код должен срабатывать только при нажатии кнопки входа в систему, и это необходимо сделать в Pre_render(). Или, в качестве альтернативы, передайте правильную группу ValidationGroup (где теперь передается null).

protected void Page_PreRender(object sender, EventArgs e)
{

    //Register custom ValdiationErrorService added errors to JavaScript so they can be added into the popup.
    ValidationErrorService.RegisterServerValidationMessageScript(Page, null);

}

person TheQui    schedule 14.06.2011    source источник


Ответы (1)


чтобы проверить, какая группа проверки действительна, вызовите:

Page.Validate(“newLetter”);

затем проверьте

Page.IsValid;

это вернет значение. У Скотта Гу есть больше информации в его блоге

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

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

наконец, проверьте свою локальную переменную в методе page_prerender и инкапсулируйте свою логику в операторе if на основе вашей новой переменной-члена.

Счастливых троп!

person Nathan Tregillus    schedule 14.06.2011
comment
Спасибо за быстрый ответ. Если я неправильно понимаю ваше решение, которое просто вернет true или false, если группа проверки пройдена. Что будет ложным, если: а) оно используется и введено неправильно или б) не используется. Итак, я до сих пор не знаю, действительно ли он использовался, и просто ввел неправильно или не использовал, и была использована другая форма. - person TheQui; 14.06.2011
comment
Можете ли вы создать флаг на своей странице asp, который устанавливается в событии нажатия кнопки? затем вы можете проверить это значение в page_prerender из-за того, как события кнопки происходят до события предварительного рендеринга. - person Nathan Tregillus; 14.06.2011
comment
Я тоже думал о подобном решении. К сожалению, одна кнопка и событие onclick происходят на главной странице, а другое — на одной странице. Тогда мне нужно было проявить творческий подход, чтобы помнить об этом. Я надеялся увидеть группу проверки так же, как .NET использует ее для автоматического запуска правильной проверки. Я предполагаю, что это сложнее, чем я думал. Если ничего не получится, я попробую этот обходной путь. - person TheQui; 14.06.2011
comment
На самом деле не обращайте внимания на мой предыдущий комментарий. Это очень легко сделать, несмотря на то, что это два разных класса. Я использовал это решение сейчас. Спасибо за помощь :D - person TheQui; 14.06.2011