创建一个新的网络应用程序(我使用的是 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
您需要通过 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;
}
虽然有趣的设计?一般来说,我更喜欢将我的对象数据源方法放在一个单独的类等中。
