我有一个不返回预期数据值的代码块。
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例程?
答案 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关键字),而不是按值传递,这就是您现在正在做的事情。