Я получаю сообщение об ошибке времени выполнения Microsoft JScript: объект не поддерживает это свойство или ошибка метода для чего-либо с autopostback=true на одной из моих страниц

У меня есть приложение .NET со следующим кодом aspx:

<%@ Page Language="C#" AutoEventWireup="True" CodeBehind="Default.aspx.cs" Inherits="WebApplication1.Default"%>
<%@ Register TagPrefix="asp" Namespace="AjaxControlToolkit" Assembly="AjaxControlToolkit"%>
<%@ Register assembly="Telerik.Web.UI" namespace="Telerik.Web.UI" tagprefix="telerik"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >

<body>
<form id="form1" runat="server">

<asp:ToolkitScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
</asp:ToolkitScriptManager>
<table>
<tr>
<td>
    <asp:RadioButtonList ID="rblTest" runat="server" AutoPostBack="True" 
        onselectedindexchanged="rblTest_SelectedIndexChanged">
        <asp:ListItem Text="1" Value="1"></asp:ListItem>
        <asp:ListItem Text="2" Value="2"></asp:ListItem>
    </asp:RadioButtonList>
</td>
<td>
    <asp:PlaceHolder ID="ph1" runat="server" Visible="False">
        Some text
    </asp:PlaceHolder>
</td>
</tr>
</table>
</form>
</body>
</html>

Затем у меня есть метод С# следующим образом:

protected void rblTest_SelectedIndexChanged(object sender, EventArgs e)
{
    if (rblTest.SelectedValue == "2")
        ph1.Visible = true;
    else
        ph1.Visible = false;
}

Ниже показано, где произошел сбой. Он падает всякий раз, когда я использую элемент управления с autopostback=true. Я использую тот же синтаксис примерно в 15 других формах, и все они работают нормально. Я где-то пропустил свойство или что-то не так с моим методом? Изначально у меня была UpdatePanel вокруг элементов управления, и я планирую добавить ее снова, но сначала мне нужно, чтобы обратная передача работала.

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

Что я упускаю или есть какая-то распространенная ошибка, которую я где-то допустил? Заранее спасибо за вашу помощь.


person user2588873    schedule 31.07.2013    source источник


Ответы (1)


Ваш скрипт __doPostBack пытается отправить форму с идентификатором "Default" (см. строку document.forms["Default"]; однако ваша разметка показывает форму с идентификатором "form1", поэтому понятно, почему он не работает: функция __doPostBack не находит форму, а вызов theForm.submit() завершается ошибкой.

Вы можете попытаться исправить это, переименовав форму, чтобы использовать идентификатор "Default", так как я не думаю, что вы можете контролировать способ генерации сценария __doPostBack.

person Icarus    schedule 31.07.2013
comment
Все мои другие формы также имеют этот идентификатор формы, хотя файлы aspx имеют другое имя, но я изменил его, чтобы оно соответствовало имени файла aspx, и теперь он вылетает в другом месте: if(this._disposeChildElements&&typeof(Sys.WebForms)!="undefined"){Sys.WebForms.PageRequestManager.getInstance()._destroyTree(b) - person user2588873; 31.07.2013