2012-01-11 2 views
1

У меня есть веб-приложение, которое назначает время для студентов в течение дня. вид планировщика.Как получить доступ к значению usercontrol в asp.net

поэтому для этого у меня есть пользовательский элемент управления как TimePeriod, и этот элемент управления загружается динамически на веб-странице.

Но количество этого пользовательского элемента управления на странице меняется, поэтому для этого у меня есть код, который динамически создает список пользовательских элементов управления.

Для примера цели я поставил i значение до 2, на самом деле она меняется выглядит так:

for(int i=0;i<2;i++) 
{ 
    TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
    //ib.RightArrowImgUrl = "~/images/wcm-circle-arrow-button.png"; 
    span_tempList.Controls.Add(ib); 

} 

Когда пользователь будет сделано внесение изменений на время всех дней. то есть во всех пользовательских элементах управления на странице.

На странице есть кнопка, которая вносит изменения в базу данных.

, но здесь возникает проблема: как получить доступ к значениям этих значений текстовых полей со страницы, так как она теперь отображается как html.

Это мой Личный код: ---

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TimePeriod.ascx.cs" Inherits="ClassManagment.TimePeriod" %> 


<div> 
    <asp:TextBox ID="time3" size="10" value="08:00" runat="server"></asp:TextBox><asp:TextBox ID="time4" size="10" value="09:00" runat="server"></asp:TextBox> 

</div> 

Код Позади UserControl: --------

public partial class TimePeriod : System.Web.UI.UserControl 
{ 
     protected global::System.Web.UI.WebControls.TextBox time3 = new System.Web.UI.WebControls.TextBox(); 
     protected global::System.Web.UI.WebControls.TextBox time4 = new System.Web.UI.WebControls.TextBox(); 


     public string TimeFrom 
     { 
      get { return time3.Text; } 
      set { time3.Text = value; } 
     } 

     public string TimeTo 
     { 
      get { return time4.Text; } 
      set { time4.Text = value; } 
     } 
} 

Как я могу получить доступ к значению UserControl?

ответ

1

так:

TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
string timeTo = ib.TimeTo; 
string timeFrom = ib.TimeFrom; 
+0

Вы можете отслеживать динамически добавленные элементы управления на своей странице, помещая их в поля, а затем обращаться к ним как к обычным объектам. – ivowiblo

+0

Правильно, когда вы создаете элементы управления динамически, вам нужно воссоздать их на событии страницы OnInit, чтобы получить их значения. – IamStalker

+0

А также для поднятия событий. то есть пользовательский элемент управления подписывается на событие щелчка текстового поля. – ivowiblo

1

На обработчик нажатия кнопки, вы можете иметь что-то вроде этого

string timeFrom = null; 
string timeTo = null; 

foreach (Control control in span_tempList.Controls) 
{ 
    if (control is TimePeriod) 
    { 
     timeFrom = ((TimePeriod)control).TimeFrom.Text; 
     timeTo = ((TimePeriod)control).TimeTo.Text; 
     // Do something with these values 
    } 
} 
+0

, когда я пробую этот код, он дает мне такую ​​ошибку: ** Невозможно наложить объект типа «System.Web.UI.LiteralControl» на тип «ClassManagment.TimePeriod». ** На этой линии ----- --------: TimeFrom = ((TimePeriod) control) .TimeFrom; – sharad

+0

@ user1118932: Я нашел ошибку в моем коде, но это не связано с тем, что вы вставили. Пожалуйста, проверьте его снова, чтобы увидеть, что он говорит. –

+0

Нет контроля внутри 'span_tempList' - это TimePeriod, который он показывает. Как после того, как он будет отображаться в html, он не знает, что такое TimePeriod, все для вышеуказанного кода Literal i.e HTML – sharad

0

Держите глобальный массив динамически создаваемых пользовательских элементов управления в классе и получить доступ к тем хранящиеся непосредственно как таковые:

public partial class Foo : System.Web.UI.Page 
{ 

    TimePeriod [] timePeriodArray = new TimePeriod[2]; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
    for(int i=0;i<2;i++) 
    { 
     TimePeriod ib = (TimePeriod)LoadControl("TimePeriod.ascx"); 
     span_tempList.Controls.Add(ib); 
     timePeriodArray[i] = ib; 
    } 

    } 

то вы можете приобрести эти случаи напрямую.

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