Кнопка .net сработала только один раз - PullRequest
2 голосов
/ 18 декабря 2009

Хорошо, вот моя проблема:

У меня есть форма, которая требует наличия двух идентичных наборов полей, которые собирают разные наборы данных. Они содержатся в UpdatePanel. Пользователь вводит данные в форму, и когда они нажимают кнопку «Добавить» Кнопка, эта строка вставляется в DataTable. Пользователь должен иметь возможность вводить столько строк, сколько пожелает.

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

Проблема в том, что теперь у них кнопка «Добавить» срабатывает только один раз. Когда я пытаюсь ударить его снова, ничего не происходит. Обратная передача не происходит.

Я провел некоторые исследования, и они посоветовали зарегистрировать кнопки в диспетчере скриптов. Не срабатывает событие нажатия кнопки ASP.Net

Это не решило проблему.

Есть идеи, что еще я могу попробовать?

Редактировать 3: Решение: Проблема заключалась в том, что asp: RegularExpressionValidator с EnabledClientScript = "true". Кажется, что javascript элемента управления для проверки сталкивается и нарушает JavaScript asp: Button при визуализации элемента управления. Если я отключил ClientScript, то кнопки работают.

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

Редактировать 2: Я отключил asp: Validation, и он работает. Любое понимание этого?

Редактировать 1:

Вот код, соответствующий теме

кнопка разметки:

<td >
            <asp:Button ID="btnPrNew" Text="Add" OnClick="btnPrNew_Click" runat="server" />
</td>

И это функция, которая обработала событие onclick

protected void btnPrNew_Click(object sender, EventArgs e)
{
    if (prQuantityValidator.IsValid && prPriceValidator.IsValid)
    {
        permanentRepairs = newItemizedDT();
        permanentRepairsTotal = populateDT(gvEstimatePermanentRepairs,    permanentRepairs) + addNewPrRow(); ;

        updateSubtotal(totalPermanentRepairs, permanentRepairsTotal);

        bindData(permanentRepairs, gvEstimatePermanentRepairs);
        clearPrForm();
    }
    else
    {
        erErrorMessage.Text = "Please enter only number amounts in Quantity and Unit Price field.";
    }
}

1 Ответ

0 голосов
/ 18 декабря 2009

Что происходит в событиях жизненного цикла вашей страницы (например, Page_Init, Page_Load, Page_PreRender)?

Работаете ли вы с каждым постбэком (проверяете Page.IsPostBack), который вы должны обрабатывать только при первой загрузке страницы?

...