2010-04-14 3 views
1

Comment contourner cette exception?La référence d'objet n'est pas définie sur une instance d'un objet (NullreferenceException n'a pas été gérée par le code utilisateur)

Dim imagepathlit As Literal = DownloadsRepeater.FindControl("imagepathlit") 
     imagepathlit.Text = imagepath 

Voici le répéteur:

<asp:Repeater ID="DownloadsRepeater" runat="server"> 

<HeaderTemplate> 
<table width="70%"> 
<tr> 
<td colspan="3"><h2>Files you can download</h2></td> 
</tr> 
</HeaderTemplate> 

<ItemTemplate> 
<tr> 
<td width="5%"> 
<asp:Literal ID="imagepathlit" runat="server"></asp:Literal></td> 
<td width="5%"></td> 
<td>&nbsp;</td> 
</tr> 
</table> 
</ItemTemplate> 

</asp:Repeater> 

Voici le code qui récupère les données pour le répéteur:

c.Open() 
     r = x.ExecuteReader 
     While r.Read() 
      If r("filename") Is DBNull.Value Then 
       imagepath = String.Empty 
      Else 
       imagepath = "<img src=images/" & getimage(r("filename")) & " border=0 align=absmiddle>" 
      End If 

     End While 
     c.Close() 
     r.Close() 
+0

Plus explication est nécessaire et ajouter le code lié – Brij

+0

pouvez-vous coller la partie répéteur ASPX? Bien sûr, imagepathlit n'existe pas là où vous le cherchez. Si vous collez l'aspx nous pourrions répondre avec la manière appropriée de le faire –

Répondre

1

Je pense qu'il n'y a pas de contrôle trouvée dans la DownloadsRepeater contrôle appelé imagepathlit, par conséquent le contrôle imagepathlit est nul après l'appel. Rappelez-vous que Control.FindControl() recherche le contrôle basé sur ID, pas le nom du contrôle. Par conséquent, pour trouver le contrôle dans la collection ... vous auriez à eu quelque chose comme plus tôt dans l'application:

Dim imagepathlit As Literal = new Literal() 
imagepathlit.ID = "imagepathlit" 

MISE À JOUR

Puisque vous utilisez un répéteur, les commandes de l'enfant Disposez-vous un peu différemment. Vous allez avoir une instance du Literal pour chaque Item dans le Repeater. Par conséquent, pour obtenir chaque instance du contrôle, vous devez boucle à travers le Items dans le Repeater et appelez FindControl() sur chaque Item:

For Each item As Item In DownloadsRepeater.Items 
    Dim imagepathlit As Literal = item.FindControl("imagepathlit") 
Next 
+0

Le littéral est dans le .aspx comme ceci; Phil

+0

Merci beaucoup Justin – Phil

1

Si l'on suppose le code affiché est où l'exception est en effet jeté, je dirais que le DownloadRepeater ne possède pas de contrôle dont l'ID est imagepathlit.

Vérifiez votre aspx. Parce que le contrôle est dans le ItemTemplate, vous ne pouvez pas utiliser repeater.findcontrol;

1

vous devez parcourir les éléments du répéteur pour rechercher le contrôle, car le modèle d'élément peut être répété. Donc, vous devez parcourir chacun d'eux pour rechercher le contrôle comme dans:

foreach (var item in repeater.Items) 
{ 
    var control = item.FindControl("ID") as Type; 
} 

Utilisez cette syntaxe.

-1

Mon code est:

protected void GridView2_RowCommand(object sender, GridViewCommandEventArgs e) 
{ 
    SqlConnection Conn = new 
    SqlConnection(ConfigurationManager.ConnectionStrings["ConnectionString"].ToString()); 
    SqlCommand Cmd = new SqlCommand(); 
    if (e.CommandName =="Buy") 
    { 
     ImageButton img = (ImageButton)e.CommandSource; 
     int Index = Convert.ToInt32(e.CommandArgument); 
     GridViewRow Row = GridView2.Rows[Index]; 
     Label l1 = (Label)Row.FindControl("Label3"); 
     Label l2 = (Label)Row.FindControl("Label2"); 
     Label l3 = (Label)Row.FindControl("Label1"); 
     Session["user"] = "mohammad"; 
     Cmd = new SqlCommand("Insert Into Trade(pname,pdesc,price,uname)values('" + l1.Text + "','" + l2.Text + "','" + l3.Text.Replace("$", "") + "','" + Session["user"].ToString() + "')", Conn); 
     Conn.Open(); 
     Cmd.ExecuteNonQuery(); 
     Conn.Close(); 
     string Url = ""; 
     Url += "https://www.sandbox.paypal.com/cgibin/webscr?cmd=_xclick&business=" + 
     ConfigurationManager.AppSettings["paypalemail"].ToString(); 
     Url += "&first_name=Mohamed"; 
     Url += "&city=chennai"; 
     Url += "&state=tamilnadu"; 
     Url += "&item_name=" + l1.Text; 
     Url += "&amount=" + l3.Text.Replace("$", ""); 
     Url += "&shipping=5"; 
     Url += "&handling=5"; 
     Url += "&tax=5"; ; 
     Url += "&quantity=1"; 
     Url += "&currency=USD"; 
     Url += "&return=" + 
     ConfigurationManager.AppSettings["SuccessURL"].ToString(); 
     Url += "&cancel_return=" + 
     ConfigurationManager.AppSettings["FailedURL"].ToString(); 
     Response.Redirect(Url); 
    } 
} 
+0

Vous devriez ajouter une description, à la solution – timiTao

+0

Cette question a été posée il y a 8 ans et ce n'est pas une question générique où d'autres peuvent bénéficier de votre solution. Si ** vous ** avez une question alors la bonne chose à faire est de * poser une nouvelle question *, pas d'écrire une réponse à cette question, ou à toute autre question existante. ** Veuillez supprimer cette réponse. ** – Igor

Questions connexes