2014-09-22 2 views
-1

ASPX: заКак определить элементы управления в веб-форме ASP.NET C#?

<form id="form1" runat="server"> 
Language:<br /> 
<asp:DropDownList ID="DropDownList1" runat="server" AutoPostBack="True" 
    onselectedindexchanged="DropDownList1_SelectedIndexChanged"> 
    <asp:ListItem Value="English">English</asp:ListItem> 
    <asp:ListItem>Spanish</asp:ListItem> 
</asp:DropDownList> 
<asp:Label id="eng_lblContent" runat="server" >english content</asp:Label> 
    <asp:Label id="sp_lblContent" runat="server" >spanish content</asp:Label> 

</form> 

Код:

protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     ChangeLanguage(); 
} 
private void ChangeLanguage() 
{ 
     foreach (var item in form1.Controls) 
     { 
      Control c = (Control)item; 
      c.Visible = false; 
      if (c.ID.StartsWith("eng")) //error : Object reference not set to an instance of an object. 
      { 
       c.Visible = true; 
      } 
     } 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 
     if (!IsPostBack) 
      ChangeLanguage(); 
} 

Ошибка: в этой строке есть ошибка:

if (c.ID.StartsWith("eng")) // Object reference not set to an instance of an object.

+0

Являются ли элементы управления созданными динамически или почему бы вам просто не сделать eng_lblContent.Visible = True? Кроме того, вы должны прочитать о локализации http://msdn.microsoft.com/en-us/library/vstudio/c6zyy3s9(v=vs.100).aspx – Esko

+0

У меня так много contorl в веб-форме –

+0

вы просто пытаетесь обнаружить Контроль над меткой? – Usman

ответ

-2

Это означает, что Form1 не может найти элемент управления с идентификатором упомянутого. Попробуйте изменить на foreach (var c Control in Page.Controls) P.S. Esko, он прав насчет локализации, то, как вы делаете, неверно.

Вот хороший пример того, что я сказал: http://msdn.microsoft.com/en-us/library/yt340bh4(v=vs.90).aspx

+0

не работает ....... –

+0

Что такое ошибка? –

+0

имеет такую ​​же ошибку! –

-1

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

if (c is LiteralControl) 
    continue; 
else 
    { 
    c.Visible = false; 

    if (c.ID.StartsWith("eng")) 
    { 
     c.Visible = true; 
     } 
    } 
+0

имеет такую ​​же ошибку ... –

+0

Вы ошибаетесь. Литеральное управление System.Web.UI, поэтому у него есть идентификатор. –

+0

@SamieyMehdi - это HTML, который вы предоставили, завершен, если он тогда не показывает никаких ошибок на моей стороне – Usman

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