MaskedEditValidator заставляет Page.IsValid быть ложным при использовании культуры "en-GB" - PullRequest
2 голосов
/ 07 февраля 2011
<asp:TextBox id="txtDate" runat="server" Width="70" Text='<%# DataBinder.Eval(Container.DataItem, "Date") %>'/>  
<atk:MaskedEditExtender ID="meeDate" CultureName="en-GB" runat="server" Mask="99/99/9999" MaskType="Date" TargetControlID="txtDate" PromptCharacter="_" />          
<atk:MaskedEditValidator ID="mevDate" runat="server" ControlExtender="meeDate" ControlToValidate="txtDate" EmptyValueMessage=" *" InvalidValueMessage="Date is invalid" IsValidEmpty="False" CssClass="validatorError" /> 

Кажется, что следующая установка отлично работает на стороне клиента (валидатор отлично проверяет соответствие dd / MM / yyyy), однако, когда я отправляю сообщения назад и проверяю Page.IsValid, значение равно false.Я посмотрел на mevDate.IsValid, и это неверно.Кажется, что установки CultulreName на MaskedEditExtender достаточно, чтобы заставить MaskedEditValidator выдавать правильный JavaScript, но на стороне сервера это не работает.Когда я переворачиваю CultureName на «en-US», все работает как на клиенте, так и на сервере.

ОБНОВЛЕНИЕ

Одна интересная вещь, которую я заметил, - во время отладки, еслиПосмотрите на участников MaskedEditValidator, вы заметите, что для private member _Culture установлено значение «en-US», а для MaskedEditExtender правильно установлено значение «en-GB».Кажется, нет способа изменить это.

ОБНОВЛЕНИЕ 2

В итоге я нашел решение, которое выложил ниже.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2011

Вот обходной путь, с которым я закончил:

bool valid = true;
/* Only check Page.IsValid for USCulture, for other cultures MaskedEditValidator only properly works on the client-side 
 * (shows IsValid == false) on the server even though the date is in correct format and passed client side validation. */
if (USCulture)
{
    valid = Page.IsValid;
}
else
{
    /* Even though we are not checking Page.IsValid for non-us cultures, the server will trigger the validation anyway and on the 
     * postback the error message will display.  Here we simply set the .Text property to a HTML comment, for the browser to render nothing
     * as if there is no error.  Setting this property to empty/null causes the control to revert to the original message specified in .aspx. */
    mevCalendar.Text = "<!>";
}

if (valid)
{
    BindGridDataSource(pageNumber);
}
0 голосов
/ 07 февраля 2011

Похоже, что это ошибка, которую вы, возможно, захотите опубликовать на форумах ASP.NET ... там есть форум для инструментария управления AJAX, который слушатели MS тоже слушают.

...