Это ошибка Asp.net/Ajax?Ошибки Javascript и источник данных объекта - PullRequest
1 голос
/ 27 января 2011

Создание нового веб-приложения (я использую Visual Studio 2008 версии 9.0.30729.1 SP)

На странице Aspx замените теги формы следующим: (Возможно, потребуется изменить имя типа, чтобы оно соответствовало вашемуимя страницы)

<form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="True" />
    <div>
        <asp:DropDownList runat="server" DataSourceID="ObjectDataSource1">
        </asp:DropDownList>
        <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Data" TypeName="WebApplication1.WebForm2"
            OnObjectCreating="ObjectDataSource1_ObjectCreating"></asp:ObjectDataSource>
    </div>
    </form>

На странице сервера добавьте эту функцию:

public IEnumerable<string> Data()
{
    return new string[] { "some data", "foo", "bar" };
}

А затем добавьте этот обработчик события:

protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
    e.ObjectInstance = this;
}

Теперь запустите приложение,Я получаю ошибки сценария "Sys is undefined".Большие части автоматического сценария полностью отсутствуют.

Теперь в комментариях к строке экземпляра объекта:

protected void ObjectDataSource1_ObjectCreating(object sender, ObjectDataSourceEventArgs e)
{
    //e.ObjectInstance = this;
}

Теперь, когда вы запускаете приложение, ошибок сценария нет.

Что здесь происходит?

1 Ответ

6 голосов
/ 28 января 2011

Я подозреваю, что здесь происходит то, что ObjectDataSource удаляется до завершения страницы.

Событие ObjectDisposing всегда вызывается до того, как экземпляр бизнес-объекта (бизнес-объект является вашей страницей в этом контексте) сбрасывается. Если бизнес-объект реализует интерфейс IDisposable, метод Dispose вызывается после возникновения этого события (страница реализует IDisposable, например, Control> TemplateControl> Page

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.objectdatasource.objectdisposing(v=vs.80).aspx

Вам необходимо отменить удаление объекта с помощью события onobjectdisposing, например.

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="Data" TypeName="WebApplication1.WebForm2"
        OnObjectCreating="ObjectDataSource1_ObjectCreating" 
        onobjectdisposing="ObjectDataSource1_ObjectDisposing"></asp:ObjectDataSource>

Обработчик:

    protected void ObjectDataSource1_ObjectDisposing(object sender, ObjectDataSourceDisposingEventArgs e)
{
    e.Cancel = true;
} 

Интересный дизайн, хотя? Обычно я предпочитаю размещать свои методы objectdatasource в отдельном классе и т. Д.

...