, поскольку я новичок в веб-формах ASP.NET и инфраструктуре Entity, я экспериментирую с домашним проектом.SelectMethod дважды вызывается для ObjectDataSource
За это я наткнулся, после чего я пытаюсь понять:
- У меня есть ObjectDataSource (называемый
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;
}
Вот вопрос: Когда я прикрепил отладчик, я увидел, что GetEmployer
метод BLL вызывается дважды. Первый раз на .Select()
и во второй раз, когда я пытаюсь получить значение первого поля записи Employer
.
Спасибо
Зачем вы связываете данные в PreRender вместо Load? –
@DmytroRudenko Я пытался решить другую проблему и оставил ее вот так. Вы правы в том, что Page_Load более уместен, однако это не имело никакого значения для моей опубликованной проблемы. – Lefteris
Возможно, у вас есть некоторый sode в getter собственности работодателя.AME? Я не могу найти другую причину, по которой Select() может вызываться дважды. –