2013-12-19 4 views
1

У меня есть этот код позади:Применение ImageUrl в нескольких изображениях с циклом

protected void Page_Load(object sender, EventArgs e) 
{ 
    DdlAddPhoto.DataSource = Enumerable.Range(1, 9); 
    DdlAddPhoto.DataBind(); 
} 
protected void DdlAddPhoto_SelectedIndexChanged(object sender, EventArgs e) 
{   
    string SelectedAlbum = DdlAddPhoto.SelectedValue.ToString();   
    for (int i = 1; i < 20; i++) 
    { 
     string image = String.Format("Image{0}", Convert.ToString(i)); 
     string path = String.Format("~/images/prettyPhoto/{0}/fullscreen/{1}.jpg", SelectedAlbum, Convert.ToString(i)); 
     Image im = (Image)FindControl(image); 
     im.ImageUrl = path.ToString(); 
    }     
} 

И эта разметка:

<asp:DropDownList runat="server" ID="DdlAddPhoto" AppendDataBoundItems="true" AutoPostBack="true" OnSelectedIndexChanged="DdlAddPhoto_SelectedIndexChanged" > 
    <asp:ListItem Text="ΠΑΡΑΚΑΛΩ ΕΠΙΛΕΞΤΕ ALBUM" Value="0" /> 
</asp:DropDownList> 
<asp:RequiredFieldValidator ID="InsertPhotoValidate" runat="server" ValidationGroup="UPDATE" ErrorMessage="Παρακαλώ Επιλέξτε Album" 
      ControlToValidate="DdlAddPhoto" Text="*" InitialValue="0" ForeColor="Red"> </asp:RequiredFieldValidator> 
<table> 

    <tr><td>1</td><td><asp:Image ID="Image1" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>2</td><td><asp:Image ID="Image2" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>3</td><td><asp:Image ID="Image3" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>4</td><td><asp:Image ID="Image4" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>5</td><td><asp:Image ID="Image5" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>6</td><td><asp:Image ID="Image6" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>7</td><td><asp:Image ID="Image7" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>8</td><td><asp:Image ID="Image8" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>9</td><td><asp:Image ID="Image9" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>10</td><td><asp:Image ID="Image10" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>11</td><td><asp:Image ID="Image11" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>12</td><td><asp:Image ID="Image12" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>13</td><td><asp:Image ID="Image13" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>14</td><td><asp:Image ID="Image14" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>15</td><td><asp:Image ID="Image15" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>16</td><td><asp:Image ID="Image16" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>17</td><td><asp:Image ID="Image17" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>18</td><td><asp:Image ID="Image18" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>19</td><td><asp:Image ID="Image19" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td>20</td><td><asp:Image ID="Image20" runat="server" AlternateText="N/A IMAGE" Width="100px" Height="100px" /></td><td></td></tr> 
    <tr><td> 

Я хочу, чтобы применить URL изображений для всех 20 изображений с циклом. Выпадающий список дает мне правильный путь к альбому. Это дает мне ошибку: Object reference not set to an instance of an object. На линии:

 > Line 25: Image im = (Image)FindControl(image); 

Почему контроль находят обыкновение работать в точку останова дает им = нуль

+3

Почему вы спрашиваете? Потому что что-то «нуль», мой сын. Поместите точку останова в строке 19 и пройдите через свой цикл. Я предполагаю, что 'FindControl',' ImageUrl' или 'SelectedAlbum' пусты. – Brian

+0

Причины ошибки NullReference всегда одинаковы. Вы вызываете свойство объекта, но значение объекта равно null. Проверьте это [SO ответ] (http://stackoverflow.com/questions/1943465/avoiding-null-reference-exceptions) – paqogomez

+0

найти элемент управления не работает? В точке останова дает im = null.why? – Apollon

ответ

1

ответ здесь: Find a image in code behind

Я использую это:

((Image)FindControlRecursive<Image>(this, 
    String.Format("Image{0}", Convert.ToString(i)))).ImageUrl = 
     String.Format("~/images/prettyPhoto/{0}/fullscreen/{1}.jpg", 
      SelectedAlbum.ToString(), Convert.ToString(i)); 

, а также использовать этот метод, который Антонио Bakula дает:

public static T FindControlRecursive<T>(Control holder, string controlID) where T : Control 
{ 
    Control foundControl = null; 
    foreach (Control ctrl in holder.Controls) 
    { 
     if (ctrl.GetType().Equals(typeof(T)) && 
      (string.IsNullOrEmpty(controlID) || (!string.IsNullOrEmpty(controlID) && ctrl.ID.Equals(controlID)))) 
     { 
      foundControl = ctrl; 
     } 
     else if (ctrl.Controls.Count > 0) 
     { 
      foundControl = FindControlRecursive<T>(ctrl, controlID); 
     } 
     if (foundControl != null) 
      break; 
    } 
    return (T)foundControl; 
} 

Проблема была в том, что FindControl не работает для изображений.

+1

FYI, ничего особенного в изображениях нет. Попробуйте добавить изображение вверху этой страницы (перед «DropDownList') и посмотреть, работает ли функция« FindControl ». –

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

  • Нет связанных вопросов^_^