Skip to main content
 首页 » 编程设计

c#之这是 Asp.net/Ajax 错误吗 Javascript 错误和对象数据源

2024年01月29日36artech

创建一个新的网络应用程序(我使用的是 Visual Studio 2008 版本 9.0.30729.1 SP)

在 Aspx 页面中,将 Form 标记替换为:(可能需要更改类型名称以匹配您的页面名称)

<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”脚本错误。大部分自动脚本完全缺失。

现在注释掉 Object Instance 行,

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

现在当您运行应用程序时,没有脚本错误。

这是怎么回事?

请您参考如下方法:

我怀疑这里发生的是 ObjectDataSource 在页面完成之前被处理掉。

ObjectDisposing 事件总是在业务对象实例(业务对象在此上下文中是您的页面)被丢弃之前引发。如果业务对象实现 IDisposable 接口(interface),则在引发此事件后调用 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; 
}  

虽然有趣的设计?一般来说,我更喜欢将我的对象数据源方法放在一个单独的类等中。