J'ai un formulaire de don qui contient un panneau de mise à jour qui contient une liste déroulante pour des montants prédéterminés plus l'option "Autre" "Lorsque" Autre "est sélectionné la liste déroulante a déclenché le partiel En dehors de ce panneau de mise à jour, j'ai un champs de formulaire de contrôle de serveur supplémentaires tels que des zones de texte et un bouton pour la soumission. autre » est sélectionné le bouton « onclick » événement ne parvient pas à tirer un postback completASP.NET: Button extérieur UpdatePanel ne réussit pas à PostBack
Exemple:.
<asp:UpdatePanel ID="updatePanelAmount" runat="server">
<ContentTemplate>
<table style="width: 500px;">
<tbody>
<tr>
<th style="width: 200px;"><asp:Label ID="lblAmount" runat="server" CssClass="required" Text="Donation Amount: " /></th>
<td>
<asp:DropDownList ID="selAmount" runat="server" />
<asp:CustomValidator ID="valDonationAmount" runat="server" ControlToValidate="selAmount" ErrorMessage="Donation Amount" Display="None" />
</td>
</tr>
</tbody>
</table>
<asp:Panel ID="panelOther" runat="server" Visible="false">
<table style="width: 500px;">
<tbody>
<tr>
<th style="width: 200px;"><asp:Label ID="lblOther" runat="server" Text="Other Amount: " /></th>
<td>
$<asp:TextBox ID="txtOther" runat="server" />
<asp:RequiredFieldValidator ID="valOther" runat="server" ControlToValidate="txtOther" Display="None" ErrorMessage="Other Amount" Enabled="false" />
<asp:RegularExpressionValidator ID="valOtherExpress" runat="server" ControlToValidate="txtOther" Display="None" ErrorMessage="Other Amount: Invalid" ValidationExpression="[1-9][0-9]+(\.[0-9]{2})?" Enabled="false" />
</td>
</tr>
</tbody>
</table>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
<ctl:CreditCardForm ID="ctlCreditCardForm" runat="server" />
<asp:Button ID="btnSubmit" runat="server" Text="Donate" />
EDIT: affichage du code-behind pourrait faire est plus facile pour tout le monde
public partial class _Default : System.Web.UI.Page
{
private ArrayList _donations;
protected void Page_Init(object sender, EventArgs e)
{
valDonationAmount.ServerValidate += new ServerValidateEventHandler(valDonationAmount_ServerValidate);
selAmount.AutoPostBack = true;
selAmount.SelectedIndexChanged += new EventHandler(selAmount_SelectedIndexChanged);
updatePanelAmount.UpdateMode = UpdatePanelUpdateMode.Conditional;
updatePanelAmount.ChildrenAsTriggers = true;
btnSubmit.Click += new EventHandler(btnSubmit_Click);
}
void selAmount_SelectedIndexChanged(object sender, EventArgs e)
{
if (selAmount.SelectedItem.Text == "Other")
{
panelOther.Visible = true;
valOther.Enabled = true;
valOtherExpress.Enabled = true;
}
else
{
panelOther.Visible = false;
valOther.Enabled = false;
valOtherExpress.Enabled = false;
}
}
void valDonationAmount_ServerValidate(object source, ServerValidateEventArgs args)
{
args.IsValid = true;
if (args.Value == "0")
{
args.IsValid = false;
}
}
void btnSubmit_Click(object sender, EventArgs e)
{
Page.Validate();
if (Page.IsValid)
{
}
}
protected void Page_Load(object sender, EventArgs e)
{
_donations = new ArrayList();
double[] donations = new double[] { 20.00, 50.00, 100.00, 250.00, 500.00 };
_donations.AddRange(donations);
if (!IsPostBack)
{
foreach (Double d in _donations)
{
selAmount.Items.Add(new ListItem(String.Format("{0:c}", d), String.Format("{0:c}", d)));
}
selAmount.Items.Insert(0, new ListItem("Select Donation Amount","0"));
selAmount.Items.Add(new ListItem("Other", "Other"));
}
}
}
J'ai regardé sous un autre exemple (http://stackoverflow.com/questions/180366/losing-button-click-events -after-first-partial-postback-in-updatepanel) que le réglage "btnSubmit.UseSubmitBehavior = false" est supposé résoudre le problème. Je ne trouve pas que c'est le cas. –
Je continue de le tester et de trouver quelque chose d'intéressant. Lorsque le panneau de mise à jour affiche depuis la liste déroulante "Autre", je clique sur le bouton pour observer les requêtes déclenchées avec FireBug et rien. Mais, quand je donne une valeur à txtOther, je reçois une publication. Je ne comprends pas ça. Quelqu'un sait? –
Ce dernier commentaire semble vraiment bizarre. Cela pourrait-il être un bug de navigateur, peut-être? Quel navigateur utilisez-vous? Avez-vous essayé dans d'autres? Aussi, quel comportement obtenez-vous si vous vous débarrassez du UpdatePanel (c'est-à-dire faites tout en pleine publication)? – teedyay