gpt4 book ai didi

c# - ObjectDataSource 的 Select 方法中的 ListBox 为 null

转载 作者:太空宇宙 更新时间:2023-11-03 22:24:03 24 4
gpt4 key购买 nike

我想不出一个好的主题。我有一个简单的 ASP.NET 3.5 表单。如果您遵循带编号的评论,我会解释在 Debug模式下运行页面时我是如何单步执行代码的。以下两个函数都是在页面的代码隐藏文件中声明的方法,它们都在同一个 _Default 类中。 ManagersListBox 在 Default.aspx 页面中声明。为什么在 GetSubordinates 的上下文中,ManagersListBox 为空?就好像它消失了片刻,然后从 GetSubordinates 方法返回后又重新出现。显然,解决方案是参数化 GetSuborindates,但这与我无关。我正在尝试了解 ASP.NET 是如何工作的,我真的很想了解为什么我会看到这种行为“消失的对象”。谢谢。

    <asp:ListBox ID="ManagersListBox" runat="server" Width="293px" 
DataTextField="LoginID" DataSourceID="ObjectDataSource2"
DataValueField="EmployeeID" onload="ManagersListBox_Load"
AutoPostBack="true" onprerender="ManagersListBox_PreRender"></asp:ListBox>


<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSubordinates" TypeName="WebApplication._Default">
</asp:ObjectDataSource>

文件背后的代码:

protected void ManagersListBox_PreRender(object sender, EventArgs e)
{

if (ManagersListBox != null)
{
//1. Right here, ManagersListBox is not null
}

//2. This call causes the ObjectDataSource to call GetSubordinates
ObjectDataSource2.Select();
//4. After stepping out of GetSubordinates and back here,
// ManagersListBox is again non-null.
}

public List<DataModel.Employee> GetSubordinates()//int ManagerID)
{
//3. ManagersListBox is always null here
using (DataModel.AdventureWorksEntities entities = new DataModel.AdventureWorksEntities())
{
if (ManagersListBox != null)
{

return (from employee in entities.Employees
where employee.Manager.EmployeeID == Convert.ToInt32(ManagersListBox.SelectedValue)
select employee).ToList();
}
else
{
return (from employee in entities.Employees
select employee).ToList();
}
}
}

最佳答案

看着这个Microsoft article看起来,当在您的代码中调用 SelectMethod 时,会创建一个新的页面实例并使用此方法。

If it is an instance method, the business object is created and destroyed each time the method that is specified by the SelectMethod property is called.

因为这是页面类的一个单独实例,您将无法访问原始页面上的控件。此外,由于这是页面类的一个实例,而不是作为页面生命周期的一部分运行,因此它的所有相关控件都不会被初始化。
看起来参数化此方法是您最好的选择。

关于c# - ObjectDataSource 的 Select 方法中的 ListBox 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2062600/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com