2013-12-19 11 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个图像与一个for循环。下拉列表为我提供了正确的专辑路径。它给我的错误:Object reference not set to an instance of an object.就行了?

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

为什么查找控制不会工作在断点给IM = NULL

+3

为什么你问?因为什么是'null',我的儿子。在第19行放置一个断点并逐步完成循环。我的猜测是'FindControl','ImageUrl'或'SelectedAlbum'是空的。 – Brian

+0

NullReference错误的原因总是相同的。您正在调用对象的属性,但对象值为空。看看这个[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)); 

,还可以使用这种方法是安东尼奥·巴库拉给出:

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

仅供参考,图像没有特别之处。尝试在本页面的顶部添加一个图像(在DropDownList之前),然后查看是否可以使用FindControl。 –