2009-10-29 3 views
1

Я хочу использовать всплывающее окно, где я хочу обновить 2 поля, введенные вручную или заполненные из списка drop down. Так что мне нужно всплывающее окно с кнопкой отправки. Я экспериментирую с кодом из видео «Как я». В видеоролике показано поле, обновляемое из всплывающего окна с помощью списка радиообъектов. Я решил изменить его так, чтобы вместо закрытия всплывающего окна события radiobutton SelectedIndexChanged я удалил это и поместил код в событие отправки кнопки. Однако я получаю сообщение; Ошибка выполнения Microsoft JScript: «this._postBackSettings.async» является нулевым или не является объектом Код:Ajax popup extender - почему он НЕ работает с кнопкой отправки


<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
    <link href="StyleSheet.css" rel="stylesheet" type="text/css" /> 
    <script language="javascript" type="text/javascript"> 
     function UpdateField(text) 
     { 
      var test = text + ' - SEND A MEETING REQUEST!'; 
      $get("MyTextBox").value = test; 
//   $get("lblTest").value = test; 
//    
     } 
    </script> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <asp:ScriptManager ID="ScriptManager1" runat="server" /> 
     <div> 
      <asp:UpdatePanel runat="server" ID="updTest"> 
       <ContentTemplate> 
      <br /> 
      ToDo: 
      <asp:TextBox ID="MyTextBox" runat="server" Width="538px"></asp:TextBox> 
      <br /> 
      <asp:Panel ID="Panel1" runat="server" CssClass="popupControl" DefaultButton="btnTest"> 
       <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
        <ContentTemplate> 
         <asp:RadioButtonList ID="RadioButtonList1" runat="server"        Width="146px"> 
          <asp:ListItem Text="Scott Guthrie"></asp:ListItem> 
          <asp:ListItem Text="Simon Muzio"></asp:ListItem> 
          <asp:ListItem Text="Brian Goldfarb"></asp:ListItem> 
          <asp:ListItem Text="Joe Stagner"></asp:ListItem> 
          <asp:ListItem Text="Shawn Nandi"></asp:ListItem> 
         </asp:RadioButtonList> 
         <div style="padding:10px;"> 
          <asp:Button runat="server" ID="btnTest" Text="Submit" onclick="btnTest_Click" /> 
         </div> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      <br /> 
      <ajaxToolkit:PopupControlExtender ID="PopupControlExtender1" runat="server" CommitProperty="value" 
       CommitScript="UpdateField(e.value);" PopupControlID="Panel1" 
       Position="Bottom" TargetControlID="MyTextBox"> 
      </ajaxToolkit:PopupControlExtender> 
      </asp:Panel> 
      <div style="padding:20px;"><asp:Label runat="server" ID="lblTest" Text="Test"/>   </div> 
          </ContentTemplate> 
      </asp:UpdatePanel> 

     </div> 
    </form>  
</body> 
</html> 



protected void btnTest_Click(object sender, EventArgs e) 
{ 
    lblTest.Text = RadioButtonList1.SelectedItem.Text + " hello"; 
    PopupControlExtender.GetProxyForCurrentPopup(this.Page).Commit(RadioButtonList1.SelectedValue); 
    // Reset the selected item 
    RadioButtonList1.ClearSelection(); 

} 
+0

я могу не получить HTML для отображения в вопросе – arame3333

+0

вы пытались переместить PopupControlExtender вне Panel1? –

ответ

2

Я нашел ответ здесь; http://forums.asp.net/p/1038571/1440433.aspx

Ответ, который работал, заключался в том, чтобы установить свойство кнопки; UseSubmitBehavior = false

Почему это работает, я не знаю. Кто бы мог подумать, что это будет решение?

+0

Это работает, потому что без этого свойства кнопка будет отправлять форму на сервер вместо того, чтобы выполнять необходимый JavaScript. –

0

Я не вижу АСИНХРОННЫЙ Postback триггеры в панели ... Может быть стоит посмотреть.

0

У меня была такая же проблема, и на самом деле я не нашел удовлетворительного решения, пока не закончил http://siderite.blogspot.com/2009/02/thispostbacksettingsasync-is-null-or.html, что делает именно то, что я хочу.

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

var script = @" 
if (Sys && 
    Sys.WebForms && Sys.WebForms.PageRequestManager && 
    Sys.WebForms.PageRequestManager.getInstance) 
{ 
    var prm = Sys.WebForms.PageRequestManager.getInstance(); 
    if (prm && 
     !prm._postBackSettings) 
    { 
     prm._postBackSettings = prm._createPostBackSettings(false, null, null); 
    }"; 

ScriptManager.RegisterOnSubmitStatement(
    Page, 
    Page.GetType(), 
    "FixPopupFormSubmit", 
    script); 

В случае отправки без того, _postBackSettings быть установлено, что создает их, вызывая нулевое эталонное исключение деваться, как _postBackSettings .async тогда доступен.

Надеется, что это помогает,

Г.

Смежные вопросы