У меня есть элемент управления ascx;asp: dropdownlist is null on page_load
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="LanguageSelect.ascx.cs" Inherits="MyNamespace.LanguageSelect" %>
с кодом позади:
protected void Page_Load(object sender, EventArgs e)
{
Languages = GetSiteLanguagesService();
if (Languages.Count > 1)
{
//null reference exception here!! languageDropdown is null!
LanguageDropdown.Visible = true;
LanguageDropdown.DataTextField = "DisplayName";
LanguageDropdown.DataValueField = "LangUrl";
LanguageDropdown.DataSource = Languages ;
LanguageDropdown.DataBind();
}
}
внутри другого элемента управления:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SomePage.ascx.cs" Inherits="myNamespace.SomePage" %>
<div id="main" role="main">
<myTag:LanguageSelect id="langSelect" runat="server" />
<div class="section columns">
<div class="main-column"> ....
С отладчика я попал на Page_Load из LanguageSelect
, но выпадающий равно нулю ! если я добавляю выпадающий элемент управления в разметке, я думал, что он всегда должен существовать, в этом случае он ведет себя так, как будто это был просто динамический элемент управления.
теперь элемент управления SomePage отображается в html , но этот в myTag
вообще не отображается, не имеет значения, если я упакую выпадающий список в div, div также не будет отображаться!
Если я поставил точку останова в SomePage
Page_Load, контроль langSelect будет там (не равно нулю), но она сама по себе имеет нулевую LanguageDropdown
Является ли ваш UserControl динамически добавлен на страницу? Я прошу, потому что иногда люди забывают, что они должны создать экземпляр его с помощью 'Page.LoadControl' вместо использования конструктора. Side-Note: почти всегда плохо использовать идеи страницы для инициации UserControl неявно. Вместо этого контроллер (обычно страница) должен инициализировать элемент управления напрямую (например, путем вызова метода «BindData» или «Init»). В противном случае это может привести к проблемам жизненного цикла и непредсказуемому поведению. –
@TimSchmelter нет, его не добавляются динамически, ну ... если элемент управления добавляется как разметка, это означает, что он НЕ динамичен правильно? – lurscher