ASP.NET UpdatePanel无法与Firefox一起使用

时间:2009-12-09 20:24:43

标签: asp.net-ajax user-controls

我正在尝试使用ASP.NET 3.5做一些听起来相当简单的事情。用户应该能够向数据库添加“社区”,并在选中一个框后,从DropDown菜单中选择一个父社区,该菜单仅在选中复选框时显示。为此,我在UpdatePanel中使用了一个Panel(最初设置为Visible = false)。我的问题是虽然它适用于IE8和Chrome(虽然Chrome重新加载整个页面而不仅仅是div),但在Firefox中没有任何反应。根本没有发送的查询。我应该提一下,下面的所有代码都在用户控制页面中,而不仅仅是Web表单。

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="CommunityEditing.ascx.cs"     Inherits="Folke.Code.Element.CommunityEditing" %>
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<div class="content">
<asp:Label id="editingFeedback" runat="server" />
<dl>
<dt><%=Folke.Code.Texte.L("Name") %></dt><dd><asp:TextBox ID="name" runat="server" /><br />
<asp:RequiredFieldValidator ID="nameReq" runat="server" ControlToValidate="name" ErrorMessage="Community name is required!" /><br />
</dd>
</dl>
<asp:CheckBox ID="cbToggle" runat="server" 
    OnCheckedChanged="TogglePanel" 
        Text="Has a parent community" AutoPostBack="True" />
<asp:UpdatePanel ID="parentCommunityUpdatePanel" runat="server" UpdateMode="Conditional">
<ContentTemplate>
    <asp:Panel id="parentCommunityPanel" runat="server" Visible="false">
        <asp:DropDownList ID="communityListDropDownList" runat="server"/>
    </asp:Panel>
</ContentTemplate>
<Triggers>
    <asp:PostBackTrigger ControlID="cbToggle" />
</Triggers>
</asp:UpdatePanel>
<asp:Button runat="server" Text="Add" ID="send" onclick="send_Click" />
</div>

代码隐藏代码非常简单:

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // Populate drop down menu
            var session = HibernateModule.CurrentSession;
            var communityList = from community in session.Linq<Community>()
                                select community;
            communityListDropDownList.DataValueField = "id";
            communityListDropDownList.DataTextField = "name";
            communityListDropDownList.DataSource = communityList;
            communityListDropDownList.DataBind();
        }
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
    }

protected void TogglePanel(object sender, EventArgs e)
    {
        if (cbToggle.Checked)
        {
            parentCommunityPanel.Visible = true;
        }
        else
        {
            parentCommunityPanel.Visible = false;
        }
    }

由于这在IE8中运行良好,我尝试在Web窗体中放置一个非常相似的代码(几乎完全相同),并且它在Firefox中运行良好。由于上面的代码嵌入在MasterPage中,然后在Web窗体中,然后是用户控件,所有这些“堆叠”都会导致问题吗?我花了几个小时在这上面,我找不到任何有意义的领导或解释。

编辑:

检查Firefox的错误控制台后,浏览器会报告:

错误:未定义该窗体 源文件:http://localhost:54003/EditCommunity.aspx 行:25

第25行是此脚本的第一个if语句:

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
    theForm.__EVENTTARGET.value = eventTarget;
    theForm.__EVENTARGUMENT.value = eventArgument;
    theForm.submit();
}
}
//]]>
</script>

2 个答案:

答案 0 :(得分:0)

是的,你的高斯看起来正确...... 看起来多个脚本管理器导致了问题,尝试在页面上放置脚本管理器而不是用户控件

答案 1 :(得分:0)

我发现了问题。在我的MasterPage中,标签被放置在该部分内。表单标记必须位于页面的部分中。