2015-08-16 2 views
0

У меня есть общий выбор даты, этот выбор даты распространен для почти 10 страниц, так как дата выбора даты по умолчанию установлена ​​на текущую дату, у меня есть страница (1 из 10 страниц) с link, когда я выбираю эту ссылку, она содержит некоторую дату (будущую или прошлую), поэтому я хочу, чтобы эта ссылка выбрала дату для отображения на элементе управления выбора даты, в настоящее время я могу это сделать, проблема, с которой я столкнулась, такая же измененная дата отражает другие 9 страниц, которые мне не нужны, я должен уметь видеть их по умолчанию, т.е. текущую дату.Установка даты выбора на конкретную страницу

Код:

Метод конкретной страницы я устанавливаю его на определенную дату

protected void QuickListDateNavigate(object sender, CommandEventArgs e) 
    { 
     DateTime newDate = DateTime.Parse((string)e.CommandArgument); 
     this.Parent.SessionObj.ViewDate = newDate; 
    } 

это где выше выбранной даты в настоящее время установлено связать выбранную дату, а также для других 9 страниц.

Datepicker.ascx.cs

protected override void OnPreRender(EventArgs e) 
    { 

     if (this.m_showDateText) 
     { 
      if (datepicker.Value == "") 
      { 
       PickerDate = ViewDate; 
      } 
      else 
      { 
       // ViewDate = DateTime.Parse(datepicker.Value); 
       ViewDate = this.Parent.SessionObj.ViewDate; 
       PickerDate = ViewDate; 
      } 
     } 
     base.OnPreRender(e); 
    } 

раньше он отметил линию, которая была настройки текущей даты, добавляется к следующей ссылке "ViewDate = this.Parent.SessionObj.ViewDate;" который меняет дату, как я ожидал.

public DateTime ViewDate 
    { 
     get 
     { 
      return Parent.SessionObj.ViewDate; 
     } 
     set 
     { 
      Parent.SessionObj.ViewDate = value; 
     } 
    } 

protected DateTime PickerDate 
    { 
     get 
     { 
      DateTime newDate = ViewDate;//Use current ViewDate if Value in textbox is not valid. 
      string pickerValue = this.Parent.SessionObj.ViewDate.ToString(); 
      try 
      { 
       newDate = DateTime.Parse(pickerValue); 
      } 
      catch 
      { 
       //Date was not a valid format fill in with the ViewDate 
       SetPickerDateToViewDate(); 
      } 
      return newDate; 
     } 
     set 
     { 
      this.datepicker.Value = value.ToString(this.m_dateFormatString); 
     } 
    } 

protected void SetPickerDateToViewDate() 
    { 
     PickerDate = ViewDate; 
    } 

Так как только дата была изменена на мое требование это не задерживая текущую дату для других страниц, есть ли способ я могу использовать измененную дату для конкретной страницы и даты по умолчанию для других страниц ??

ответ

1

Проблема заключается в том, что вы используете родительский элемент управления пользователя (страница .aspx, где находится пользовательский элемент управления), чтобы получить объект ASP.NET Session. Этот объект сеанса затем используется для всех 10 экземпляров пользовательского элемента управления с помощью этой недвижимости логики:

public DateTime ViewDate 
{ 
    get 
    { 
     return Parent.SessionObj.ViewDate; 
    } 
    set 
    { 
     Parent.SessionObj.ViewDate = value; 
    } 
} 

Это, как правило, плохая идея для пользовательского элемента управления (ребенок), чтобы быть, что тесно связанно с родителем. Если вы попытались использовать этот пользовательский элемент управления в сценарии, где SessionObj не существовало, то это явно взорвалось бы эффектно. Это серьезно ограничивает возможность повторного использования указанного пользовательского элемента управления.

Вы хотите, чтобы родитель (.aspx) рассказать ребенку (пользовательский контроль), что такое значение ViewDate. В вашем опубликованном коде ваш дочерний элемент управления запрашивает родителя «эй, каково значение в кеше сеанса для даты просмотра?».

Изменение кода управления пользователя к чему-то вдоль линий этого:

private DateTime myViewDate; 

public DateTime ViewDate 
{ 
    get 
    { 
     return myViewDate; 
    } 
    set 
    { 
     myViewDate = value; 
    } 
} 

Теперь на страницах, которые применяются пользовательский элемент управления, первоначально установить значение ViewDate собственности на значение сессии, а затем обновить один экземпляр, который необходимо изменить с помощью установщика свойств, когда эта страница фактически изменяет значение.

+0

Привет, Карл, все изменения на любом родителе отражаются на всех 10 экземплярах, в настоящее время страница, на которой я работаю, является единственной страницей, которую нужно изменить, а остальные 9 экземпляров предназначены для отображения календаря, который не требуется никакого выбора. – Manjuboyz

+0

@Manjuboyz - поэтому вы не можете использовать объект сеанса родителя в качестве основы для свойства 'ViewDate' вашего пользовательского элемента управления.Вам нужно изменить свой код управления пользователя, чтобы иметь переменную поддержки для хранения значения «ViewDate» и обновить ваши «getter» и «setter», чтобы «вернуть» эту резервную переменную и присвоить значение, переданное этой резервной переменной, соответственно. –

+0

myViewDate устанавливает значение 01/01/0001 по умолчанию и не принимает дату сеанса, чтобы установить его? я что-то пропустил? – Manjuboyz

Смежные вопросы