Хорошо ... это трудно объяснить, так что вот так.
У меня есть панель обновления, которая содержит несколько элементов управления. Панель обновления запускается событием OnSelectedIndexChanged раскрывающегося списка с именем: ddlUSCitizenshipStatus. Он работает, как и ожидалось, когда я выбрал новый элемент.
Однако, если я оставлю ddlUSCitizenshipStatus со значением по умолчанию, а затем нажму кнопку «отправить» на странице, требуемые полевые валидаторы скажут, что в ddlUSCitizenshipStatus произошла ошибка (что и следует, поскольку я никогда не выбирал значение). Затем я выбираю значение, сообщение об ошибке исчезает на ddlUSCitizenshipStatus, однако панель обновления не обновляется. Я отладил это локально, и событие OnSelectedIndexChanged для ddlUSCitizenshipStatus не запускается.
Если я выбираю элемент в списке ddlUSCitizenshipStatus второй раз , событие сервера OnSelectedIndexChanged срабатывает, и панель обновления обновляется и работает, как и ожидалось.
Проблема в том, что мне нужно дважды выбрать элемент в ddlUSCitizenshipStatus, после неудачной проверки, до того, как панель обновлений будет сидеть в обновлениях.
Кнопка отправки на странице выглядит так:
<asp:LinkButton ID="btnSubmitPage1" runat="server" CssClass="continueButton" OnClick="btnSubmitPage1_Click" CausesValidation="true" OnClientClick="javascript: return ValidatePage();" />
Если я удалю свой собственный скрипт OnClientClick, кнопка «Отправить» будет выглядеть следующим образом:
<asp:LinkButton ID="btnSubmitPage1" runat="server" CssClass="continueButton" OnClick="btnSubmitPage1_Click" CausesValidation="true" ValidationGroup="valGrpAdditionalInformation" />
Выпадающий список, панель обновлений и regidiredfieldvalidator работают должным образом. Однако мне нужно запустить этот пользовательский сценарий «ValidatePage ()» при нажатии кнопки.
Ниже показано, как выглядит мой скрипт ValidatePage. Я исправляю это больше часов, чем могу сосчитать .... Надеюсь, кто-нибудь сможет мне помочь. Пожалуйста, дайте мне знать, если вы можете выяснить, почему ddlUSCitizenshipStatus не обновляет панель обновления до второго щелчка после неудачной проверки.
function ValidatePage()
{
var blnDoPostBack = true;
if (typeof(Page_ClientValidate) == 'function' )
{
//Client side validation can occur, so lets do it.
//Validate each validation group.
for( var i = 0; i < Page_ValidationSummaries.length; i++ )
Page_ClientValidate( Page_ValidationSummaries[i].validationGroup.toString() );
//Validate every validation control on the page.
for (var i = 0; i < Page_Validators.length; i++)
ValidatorValidate(Page_Validators[i]);
//Figure out which validation groups have errors, store a list of these validation groups in an array.
var aryValGrpsWithErrors = [];
for( var i = 0; i < Page_Validators.length; i++ )
{
if( !Page_Validators[i].isvalid )
{
//This particular validator has thrown an error.
//Remeber to not do a postback, as we were able to catch this validation error client side.
blnDoPostBack = false;
//If we haven't already registered the validation group this erroring validation control is a part of, do so now.
if( aryValGrpsWithErrors.indexOf( Page_Validators[i].validationGroup.toString() ) == -1 )
aryValGrpsWithErrors[aryValGrpsWithErrors.length++] = Page_Validators[i].validationGroup.toString();
}
}
//Now display every validation summary that has !isvalid validation controls in it.
for( var i = 0; i < Page_ValidationSummaries.length; i++ )
{
if( aryValGrpsWithErrors.indexOf( Page_ValidationSummaries[i].validationGroup.toString() ) != -1 )
{
Page_ValidationSummaries[i].style.display = "";
document.getElementById( Page_ValidationSummaries[i].id.toString() + "Wrapper" ).style.display = "";
}
else
{
//The current validation summary does not have any error messages in it, so make sure it's hidden.
Page_ValidationSummaries[i].style.display = "none";
document.getElementById( Page_ValidationSummaries[i].id.toString() + "Wrapper" ).style.display = "none";
}
}
}
return blnDoPostBack;
}