ASP.Net代码块不返回数据

时间:2012-07-25 20:06:29

标签: c# asp.net oop

我有一个不返回预期数据值的代码块。

protected void Page_Load(object sender, EventArgs e)
{
corpEmployee.Employee editEmp = new corpEmployee.Employee();

editEmp.EmployeeID = PatientCustomerID.Value;
corpCustomerMgr.GetEmployeeRecord(editEmp);

tboxFirstName.Text = editEmp.EmpFirstName.ToString();
tboxLastName.Text = editEmp.EmpLastName.ToString();
tboxCity.Text = editEmp.EmpCity.ToString();
tboxAddress.Text = editEmp.EmpAddrLine1.ToString();
}  


public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  

执行corpCustomerDAL.GetEmployeeData(empRecord, QueryData);时,将返回empRecord,其中Employee对象具有正确的属性值。但是,当代码返回到corpCustomerMgr.GetEmployeeRecord(editEmp);时,employee对象具有空值。

如何将Employee对象值返回到Page_Load例程?

4 个答案:

答案 0 :(得分:2)

您可以在GetEmployeeRecord静态方法中返回对象,也可以在参数前包含ref,这样您就可以将员工作为参考传递而不是复制变量。

我建议您使用ref返回您的数据,因为您的方法名称似乎具有误导性,以及其他原因。

答案 1 :(得分:1)

根据您的评论,您似乎正在使用所需的员工数据填充empRecord。最简单的选择是从GetEmployeeRecord

返回填充的记录
public static corpEmployee.Employee GetEmployeeRecord(corpEmployee queryData)
{
    List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
    corpCustomerDAL.GetEmployeeData(empRecord, QueryData);
    return empRecord.Count == 0 ? null : empRecord[0];  //or empRecord.FirstOrDefault()
}

然后,您应该将Page_Load处理程序的开头更改为:

corpEmployee.Employee queryEmp = new corpEmployee.Employee();
queryEmp.EmployeeID = PatientCustomerID.Value;

corpeEmployee.Employee editEmp = corpCustomerMgr.GetEmployeeRecord(queryEmp);

答案 2 :(得分:0)

立即出现两个想法:

  • 您的异常处理需要工作。你不应该抓住Exception,你不应该默默地吞下例外。很可能是异常被抛出,这就是你没有得到数据的原因。

  • 您有一个Get***方法 - 应该返回数据。看起来你期望把结果放到一个对象中...这是一种从方法中获取数据的混乱方式。如果你的方法签名是这样的话会更清楚:

    public static Employee GetEmployeeRecord(string employeeId)
    

答案 3 :(得分:0)

最有可能发生的事情是您传入的员工对象正在被复制,并在函数终止时被销毁。 为了更好地说明,我添加了一些评论:

public static void GetEmployeeRecord(corpEmployee.Employee QueryData)
{
    //QueryData is a newly created Employee here, and is NOT the same one that was passed in.
    try
    {
        List<corpEmployee.Employee> empRecord = new List<corpEmployee.Employee>();
        corpCustomerDAL.GetEmployeeData(empRecord, QueryData);//
        //QueryData now contains the data you want your original object to contain
    }
    catch (Exception ex)
    {
    LogAppError(ex.ToString());
    }
}  //when this function terminates, QueryData ceases to exist.

为了解决这个问题,请通过引用传递员工(使用ref关键字),而不是按值传递,这就是您现在正在做的事情。