Ajax popup extender - почему он не будет работать с кнопкой отправки - PullRequest
1 голос
/ 29 октября 2009

Я хочу использовать всплывающее окно, в котором я хочу обновить 2 поля, либо введенные вручную, либо заполненные из раскрывающегося списка. Поэтому мне нужно всплывающее окно с кнопкой отправки. Я экспериментирую с кодом из видео "Как я". В видео они показывают поле, обновляемое из всплывающего окна со списком радиокнопок. Я решил изменить его так, чтобы вместо закрытия всплывающего окна в событии SelectedIndexChanged в радиокнопке я удалил его и поместил код в событие отправки кнопки. Однако я получаю сообщение; Ошибка выполнения Microsoft JScript: 'this._postBackSettings.async' является нулевым или не является объектом Код:


<%@ 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();

}

Ответы [ 3 ]

2 голосов
/ 29 октября 2009

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

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

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

0 голосов
/ 24 февраля 2011

У меня была такая же проблема, и я действительно не нашел никакого удовлетворительного решения, пока не остановился на 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 становится доступным.

Надеюсь, это поможет,

G.

0 голосов
/ 29 октября 2009

Я не вижу никаких триггеров ASYNC POSTBACK на вашей панели ... Возможно, стоит посмотреть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...