Событие C # onClick в ASP.NET Кнопка не запускается изначально, но выполняет обратную передачу ... и в конечном итоге срабатывает после нескольких нажатий - PullRequest
2 голосов
/ 22 ноября 2011

У меня странная проблема, и я не уверен, где искать или как отлаживать. У меня есть родительская страница A, в которой есть поле управления со списком из 7 провинций; Каждая провинция имеет пользовательский контроль (вид). По умолчанию выбранным индексом является провинция "SK", которая загружает на одну и ту же страницу пользовательский элемент управления Динамически.

Ниже мой HTML и код для родительской страницы

<telerik:RadComboBox ID="cmbProvince" runat="server" OnSelectedIndexChanged="cmbProvince_SelectedIndexChanged" AutoPostBack="true">
<Items>
<telerik:RadComboBoxItem runat="server" Text="Quebec" Value="QC" />
<telerik:RadComboBoxItem runat="server" Text="Ontario" Value="ON" />
<telerik:RadComboBoxItem runat="server" Text="Saskatchewan" Value="SK" />
<telerik:RadComboBoxItem runat="server" Text="Manitoba" Value="MB" />
<telerik:RadComboBoxItem runat="server" Text="Yukon" Value="YT" />
<telerik:RadComboBoxItem runat="server" Text="Nuvanut" Value="NU" />
</Items>
 </telerik:RadComboBox>

protected void Page_PreInit(object sender, EventArgs e)
{
    MasterPage master = this.Master;

    _currentProvince = GetCurrentOperatingProvince(IsPostBack);
    cmbProvince.SelectedValue = _currentProvince;
    txtReferenceNo.Text = "TECHLOS" + DateTime.Now.ToString("MMddyyyy-HHMMss");

    //Reload Dynamic Control on Every Page Creation
    LoadDetailControl();
}

private void LoadDetailControl()
{
    UserControl ucPPSAControl = (UserControl)LoadControl(GetUserControlPath(_currentProvince));
    IPPSAView provView = ucPPSAControl as IPPSAView;

    ApplicationContext.TargetProvince = _currentProvince;

    PPSAPresenter presenter = new PPSAPresenter(provView, ApplicationContext);
    provView.AttachPresenter(presenter, cmbProvince.SelectedValue, txtReferenceNo.Text);

    phPPSAControl.Controls.Add(ucPPSAControl);
}

    protected void cmbProvince_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        phPPSAControl.Controls.Clear();
        _currentProvince = e.Value;
        LoadDetailControl();
    }

В каждом UC по провинции есть кнопка «Поиск» с событием OnClick. Когда я в первый раз оказываюсь в провинции по умолчанию, кнопка «Поиск» работает, как и ожидалось, и запускает OnClick и запускается обработчик событий Search_Click.

Ниже приведен типичный UC для каждой провинции

HTML button.
 <telerik:RadButton ID="btnSearch" runat="server" Text="Search" OnClick="Search_OnClick">
                            </telerik:RadButton>

and Code behind

        protected void Search_OnClick(object sender, EventArgs e)
        {
            if (isValidSearchRequest())
            {
                DisplayResultsFromResponse(presenter.Search());
            }
            else
            {
                phResponse.Controls.Add(new LiteralControl(string.Format("<span style='color:red'>Invalid Search Request</span>")));
            }
        }

Теперь, когда я изменяю провинцию на «ВКЛ» (или любая другая провинция имеет такое же поведение), когда я нажимаю кнопку «Поиск» на только что сгенерированном UC, он отправляет сообщения только без запуска события OnClick. Двойной щелчок делает то же самое ... и в третий раз запускает OnClick ... и работает как обычно !!!

Такое поведение происходит, если я имею «ВКЛ.» Просмотр в первый раз, когда он загружается, и просмотр «SK» (или любой другой просмотр в этом отношении) во второй раз, когда я могу предположить, что что-то с начальным созданием представления делает кнопка работает правильно ... но последующая перезагрузка нового элемента управления приведет к сбою OnClick.

Еще один момент, на который следует обратить внимание: как только я изменю провинцию, даже если я вернусь в исходную провинцию, OnClick не будет работать ... Также я использую элементы управления Telerik с RadAjaxManager

Как я могу отладить это, чтобы узнать, где моя проблема ... еще лучше, как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

После 3 дней, потраченных на это ... похоже, проблема связана с динамическим управлением. Я создал его без присвоения идентификатора ... так что при воссоздании он каким-то образом отсылал назад несколько раз, вероятно, потому что он использовал сгенерированный идентификатор ASP, и каждый раз он не совпадал, поэтому мой onCLick на кнопке не мог найти кнопку который первоначально назвал это .. я предполагаю, что в 3-й раз, идентификатор тот же, и тогда, когда он вызвал его правильно.

В любом случае, я знаю, что это решило проблему, которая у меня была

0 голосов
/ 22 ноября 2011

после размещения ScriptManager этот код

<telerik:RadAjaxManager ID="RadAjaxManager1" runat="server">
    <AjaxSettings>
        <telerik:AjaxSetting AjaxControlID="RadAjaxManager1">
            <UpdatedControls>
                <telerik:AjaxUpdatedControl ControlID="cmbProvince" />
                <telerik:AjaxUpdatedControl ControlID="btnSearch" />
            </UpdatedControls>
        </telerik:AjaxSetting>

    </AjaxSettings>

может помочь вам

...