Переключатель по умолчанию не запускает обратную передачу UpdateControl - PullRequest
2 голосов
/ 18 февраля 2009

У меня есть три радиокнопки на форме - A, B, C. Каждый из этих выборов заполняет раскрывающийся список с данными, относящимися к опции. Когда форма загружается, я устанавливаю опцию A для проверки (по умолчанию).

Когда я выбираю кнопки B или C, AsyncPostBack срабатывает нормально, и выпадающий список заполняется. НО, последующий выбор A из B или C не вызывает событие.

Я подозреваю, что, поскольку A был проверен при загрузке формы, браузер не видит каких-либо "изменений", вызывающих событие.

Итак, что можно сделать, чтобы активировать кнопку A по умолчанию, которая распознает, что она изменяется с B или C, чтобы повысить обратную передачу?

Я пробовал как установить проверенное состояние кнопки A в коде только при начальной загрузке страницы (т. Е. IsPostBack is False), так и альтернативно установить проверенный атрибут радио-кнопки в html с одинаковыми результатами. Если я не установил переключатель по умолчанию, функциональность работает должным образом, за исключением того, что у меня нет переключателя и раскрывающегося списка по умолчанию при первой загрузке страницы.


HTML ...

<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" />
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" />
<asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" />

<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline">
<ContentTemplate>
   <asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory"></asp:DropDownList>
</ContentTemplate>
<Triggers>
   <asp:AsyncPostBackTrigger ControlID="radBook" />
   <asp:AsyncPostBackTrigger ControlID="radCD" />
   <asp:AsyncPostBackTrigger ControlID="radDVD" />
</Triggers>
</asp:UpdatePanel>

Код позади ...

Sub Page_Load
    If Not Me.IsPostBack Then
       radBook.Checked = True
    End If
End Sub

Private Sub rad_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs) _
   Handles radBook.CheckedChanged, radCD.CheckedChanged, radDVD.CheckedChanged

      zLoadShippingSizeDropdown()

End Sub

Ответы [ 5 ]

5 голосов
/ 07 июля 2011

У меня была такая же проблема, и я часами искал ответ. Похоже, это не имеет ничего общего с ViewState или чем-то подобным, но с некоторой несовместимостью использования предварительно проверенной RadioButton в качестве триггера для Async PostBack. Работа вокруг, которую я нашел, удивительно проста и сработала сразу; вместо использования checked=true на разметке или myRadioButton.Checked на стороне сервера я сделал следующее:

Не задавать атрибут в разметке и добавить его в событие Page_Load:

if (!IsPostBack)
{
    MyRadioButton.InputAttributes["checked"] = "true";
    ...
}

Надеюсь, это поможет и сэкономит многим людям потянув за волосы :) 1009 *

1 голос
/ 16 октября 2009

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

radCD.Checked = False
radDVD.Checked = False
1 голос
/ 18 февраля 2009

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

protected void Form_Load(object sender, EventArgs e) 
{
    if (!Page.IsPostback) 
    {
        // Set radiobutton A...
    }
}
0 голосов
/ 18 октября 2011

ВАУ, я бы никогда не подумал, что это может быть ошибкой. Спасло много часов разочарований.

Спасибо, что Хуан решил проблему с Microsoft и нашел решение для остальных.

0 голосов
/ 19 февраля 2009

Вы случайно тоже обрабатываете viewstate в своем коде? Если это так, то вам нужно работать с его версией AJAX, поскольку представление состояния часто может быть потеряно на страницах стиля AJAX. Попробуйте поместить свои кнопки внутри панели обновлений и посмотрите, будет ли у вас такое же поведение, если для панели установлен режим обновления, установленный на условный. Не беспокойтесь о триггерах обратной передачи, если вы это сделаете.

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

<asp:UpdatePanel ID="pnlTasks" runat="server" UpdateMode="Conditional" RenderMode="Inline">
<ContentTemplate> 
<asp:RadioButton ID="radBook" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="Book" />
<asp:RadioButton ID="radCD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="CD" /><asp:RadioButton ID="radDVD" runat="server" AutoPostBack="true" GroupName="grpArticleType" Text="DVD" />
  <asp:DropDownList ID="dropShippingSize" runat="server" CssClass="dropdownMandatory">
</asp:DropDownList>
</ContentTemplate>
</asp:UpdatePanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...