MaskedEdit Extender потерял данные при обратной передаче - PullRequest
0 голосов
/ 12 июня 2009

В настоящее время я разрабатываю веб-сайт, требующий ввода DateTime, и использую расширитель MaskEdit в TextBox, который используется для ввода даты и времени. Эти DateTime используются в качестве входных данных для вычисления общего количества часов и других вещей, которые должны отображаться на той же странице (для предварительного просмотра)

Однако после обратной передачи с использованием MS AJAX мои вычисленные данные отображаются, но мои записи DateTime очищаются. До того как я обновил AjaxControlToolkit до последней версии, доступной для .NET 2.0, мои записи были повреждены после обратной передачи. Обратная передача запускается кнопкой LinkButton. До этого я пытался использовать свойство AutoPostBack TextBox.

Любые идеи для исправления или я должен рассмотреть возможность отказа от MS AJAX и начать использовать другую библиотеку AJAX либо для ASP.NET, либо для непосредственного обращения к JS.

Обратите внимание, что я не могу использовать .NET 3.5, потому что целевой сервер использует Windows 2000 .....

Ответы [ 2 ]

0 голосов
/ 12 июня 2009

Sure

ASPX часть:

  <td><asp:TextBox id="textBeginStation" runat="server"></asp:TextBox></td>
<td>
    <asp:TextBox ID="textBeginServiceDateTime" runat="server"></asp:TextBox>
    <ajaxToolkit:MaskedEditExtender
        ID="textBeginServiceDateTimeMaskedEditExtender" runat="server" 
        TargetControlID="textBeginServiceDateTime" MaskType="DateTime" 
        Mask="9999/99/99 99:99" UserDateFormat="YearMonthDay" 
        UserTimeFormat="TwentyFourHour">
    </ajaxToolkit:MaskedEditExtender>
</td>
<td>
    <asp:TextBox ID="textBeginStationDateTime" runat="server"></asp:TextBox>
    <ajaxToolkit:MaskedEditExtender
        ID="textBeginStationDateTimeMaskedEditExtender" runat="server" 
        TargetControlID="textBeginStationDateTime" MaskType="DateTime" 
        AutoComplete="False" Mask="9999/99/99 99:99" UserDateFormat="YearMonthDay" 
        UserTimeFormat="TwentyFourHour" EnableViewState="False">
    </ajaxToolkit:MaskedEditExtender>
</td>
<td><asp:TextBox ID="textBeginRemarque" runat="server"></asp:TextBox></td>

Это всего лишь пример, остальное очень похоже. Это часть UserControl, которая включается в UpdatePanel от MS AJAX

Код LinkButton:

ProductionDependencyFactory depFactory = new ProductionDependencyFactory();
    try
    {
        DateTime beginServiceDateTime = DateTime.Parse(textBeginServiceDateTime.Text);
        DateTime beginStationDateTime = DateTime.Parse(textBeginStationDateTime.Text);
        DateTime endServiceDateTime = DateTime.Parse(textEndServiceDateTime.Text);
        DateTime endStationDateTime = DateTime.Parse(textEndStationDateTime.Text);

        NormalTrainTimeMilageCalculator calculator = depFactory.Create<NormalTrainTimeMilageCalculator>();

        calculator.BeginStation = textBeginStation.Text;
        calculator.BeginServiceDateTime = beginServiceDateTime;
        calculator.BeginStationDateTime = beginStationDateTime;
        calculator.EndStationDateTime = endStationDateTime;
        calculator.EndServiceDateTime = endServiceDateTime;
        calculator.EndStation = textEndStation.Text;

        labelTotalHour.Text = calculator.TotalTime().Hours.ToString();
        labelTotalMinute.Text = calculator.TotalTime().Minutes.ToString();
        labelTotalMilage.Text = calculator.TotalMilage().ToString();
    }
    catch (Exception)
    {
        // Do nothing
    }
0 голосов
/ 12 июня 2009

Я не могу воспроизвести эту ошибку. Не могли бы вы опубликовать свой код?

РЕДАКТИРОВАТЬ: Хорошо, пара возможных решений.

  1. Использовать атрибут

    ClearTextOnInvalid = "ложь"

на ваших MaskedEditExtenders. Это предотвратит удаление страницы введенной датой, если она недействительна.

  1. Проверьте и дважды проверьте, что вы не присваиваете значение этим текстовым полям с помощью Masked Edit Extenders, поскольку, если вы случайно введете недопустимое значение, оно не примет его и не сотрет

Единственное другое решение, которое я нашел, это вообще не использовать MaskedEditExtender ...

...