由于我是ASP.NET webforms和实体框架的新手,我正在试验一个宠物项目。
在此期间,我遇到了以下几点,我正在努力理解:
EmployerObjectDataSource),它使用业务逻辑层方法(BLL)对象来选择数据--这个方法是GetEmployer。Page_PreRender回调中,我调用一个方法populateFields来填充FormView中的字段populateFields中,我调用EmployerObjectDataSource.Select()来获取Employer记录。以下是代码:
//Following Dmytro's comment, I will use Page_Load instead, however this
//does not resolve the problem
//protected void Page_PreRender(object sender, EventArgs e)
protected void Page_Load(object sender, EventArgs e)
{
_username = "Lefteris";
_version = 1;
if (!Page.IsPostBack)
{
populateFields();
}
}
private bool populateFields()
{
//IEnumerable<Employer> empl = ((IEnumerable<Employer>)EmployerObjectDataSource.Select()).ToList();
//The GetEmployer method of BLL is called here (as expected)
List<Employer> empl = (List<Employer>)EmployerObjectDataSource.Select();
System.Threading.Thread.Sleep(1000);
if (empl.Count() == 1)
{
Employer employer = empl.First();
//The GetEmployer method of BLL is called here (WHY????)
((RadTextBox)EmployerFormView.Row.FindControl("txtAme")).Text = employer.AME.ToString();
((RadTextBox)EmployerFormView.Row.FindControl("txtAfm")).Text = employer.EmplrAFM.ToString();
((RadTextBox)EmployerFormView.Row.FindControl("txtName")).Text = employer.EmplrLastName.ToString();
...GetEmployer如下所示:
public List<Employer> GetEmployer(string username, short version)
{
DateTime today = DateTime.Today;
List<Employer> employers = (ikaRepository.GetEmployers(username, today, version)).ToList<Employer>();
Debug.Assert(employers.Count() <= 1, "This is a logical Error - Can we have more than one active Employer records per user?");
return employers;
}下面是一个问题:当我附加调试器时,我看到BLL的GetEmployer方法被调用了两次。第一次在.Select()上,第二次尝试获取Employer记录的第一个字段的值。
谢谢
发布于 2013-11-22 19:08:32
我英语不太好,抱歉,提前说。
在代码隐藏中手动将FormView绑定到ObjectDataSource。因此,您在Page 加载阶段(基于当前代码)调用了一次方法。
您是否在标记(ASPX内容)中将"EmployerObjectDataSource"分配给EmployerFormView的DataSourceID,并在Page 事件处理阶段( Load阶段之后)将FormView绑定到ObjectDataSource,因此它再次调用Select方法。
最好不要手动将DataBoundControls (如FormView)绑定到DataSourceControls (如ObjectDataSource)。相反,如果需要将一些数据传递给BLL以选择/过滤逻辑,则可以在SelectParameters标记中使用ObjectDataSource。
我认为这种情况就是这样发生的。我建议你也写上你的标价。
另一种情况是将一个ObjectDataSource绑定到多个DataBoundControls。在这种情况下,每个DataBoundControls都会在绑定时间上调用ObjectDataSource的Select方法。要处理这种情况,可以使用ObjectDataSource的缓存功能。
我希望这些解释是有用的。
我建议您在使用ASP.NET数据控件之前阅读这些资源:
祝好运!
https://stackoverflow.com/questions/20082323
复制相似问题