我想使用弹出窗口,我想更新2个字段,手动输入或从下拉列表中填充。 所以我需要一个带有提交按钮的弹出窗口。 我正在试验“我如何”视频中的代码。 在视频中,他们显示了一个正在从具有radiobutton列表的弹出窗口更新的字段。 我决定更改它,以便不删除radiobutton SelectedIndexChanged事件中的弹出窗口,而是将其删除并将代码放入按钮提交事件中。 但是我收到了消息; Microsoft JScript运行时错误:'this._postBackSettings.async'为null或不是对象 代码是;
<%@ 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 :(得分:2)
我在这里找到答案; http://forums.asp.net/p/1038571/1440433.aspx
有效的回复是设置按钮属性; UseSubmitBehavior =假
为什么这个工作我不知道。谁会想到这会是解决方案?
答案 1 :(得分:0)
我的面板中没有看到任何ASYNC POSTBACK触发器...可能值得一看。
答案 2 :(得分: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随后可用。
希望这有帮助,
-G。