2012-03-27 4 views
2

У меня есть пользовательский контроль, который в основном представляет собой раскрывающийся список, предварительно заполненный значениями из базы данных.Атрибут OnChange на пользовательском DropDownList не отображается

<asp:DropDownList ID="selResponseTimes" runat="server" SkinID="filterSkin">     
</asp:DropDownList> 

Код позади:

public partial class Response_Times_Drop_Down : System.Web.UI.UserControl 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      DataTable objDataTable = DAL.ExecuteDataTable("sp_cl_Response_Times_Get", null); 
      selResponseTimes.DataSource = objDataTable; 
      selResponseTimes.DataTextField = "TM_Code"; 
      selResponseTimes.DataValueField = "TM_Code"; 
      selResponseTimes.DataBind(); 
     } 
    } 

    public string SelectedValue 
    { 
     get 
     { 
      return selResponseTimes.SelectedValue; 
     } 
     set 
     { 
      selResponseTimes.SelectedValue = value; 
     } 
    } 

} 

управления добавляется к моей странице следующим образом, и работает отлично:

<asp:ResponseTimesDropDown runat="server" ID="selResponse" /> 

Я добавляю на стороне клиента события как атрибуты для стандартных элементов управления на Page_Load, используя следующее:

txtCallRelatedCall.Attributes.Add("onblur", "CheckRelatedCall()"); 

Однако, когда я пытаюсь сделать это с помощью своего пользовательского элемента управления, они не добавляются.

selResponse.Attributes.Add("onchange", "CalculateResponseTime()"); 

Однако если отлаживать код, атрибуты добавляются в коллекцию, кажется, что они просто не выводятся на страницу. Почему это?

+0

Вы можете показать нам javacript и html-часть? Также попробуйте установить «CheckRelatedCall(); return false;» и "CalculateResponseTime(); return false;" видеть, работает ли. – Aristos

+0

Это не имеет значения, я никогда не получаю вызов javascript, потому что я не могу успешно добавить атрибут onchange в свой элемент управления. – fourdam

+0

Мое предположение заключается в том, что, поскольку я могу добавлять атрибуты к стандартным элементам управления на событие 'Page_Load', а не свой собственный элемент управления, это потому, что элемент управления уже был обработан, поэтому мне нужно добавить атрибут на более раннем этапе? – fourdam

ответ

2

На какой стадии жизненного цикла страницы вы добавляете атрибуты?

Попробуйте добавить их в на Page_Init

Protected void Page_Init(object sender, EventArgs e) 
{ 
    selResponse.Attributes.Add("onchange", "CalculateResponseTime()"); 
} 

EDIT (см комментарии):

Public void CalculateResponseEnabled() 
{ 
     selResponseTimes.Attributes.Add("onchange", "CalculateResponseTime()"); 
} 

Тогда в от вы можете вызвать CalculateResponseEnabled делая.

selResponse.CalculateResponseEnabled(); 
+0

Извините, я добавляю их в Page_Load, я также пробовал их в Page_PreRender безрезультатно. Просто попробовал Page_Init там без успеха. – fourdam

+0

Есть ли причина, по которой вы добавляете его из формы, а не внутри элемента управления? Если вы добавите его внутри элемента управления в selResponseTimes, он должен работать. –

+0

Моя логика заключалась в том, что это многоразовый элемент управления. Я бы не захотел иметь клиентское событие onchange при каждом использовании элемента управления только на этой конкретной странице. – fourdam

0

У меня была та же проблема. Я добавил свой код в событие OnPreRender конкретного элемента управления, который я использовал, и он начал работать.

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