webForumDet fria alternativet

bu behöver jag hjälp igen

.NET

11 svar · 299 visningar · startad av renholm

Medlem sedan apr. 20012 266 inlägg
Frågan#1

hej igen!

har lite mer problem.. försöker komma åt en label innanför en ASP:Repeater.
försöker med följande kod:

          for (int i=0; i<navParent.Items.Count; i++) {
		((Label) navParent.Items[i].FindControl("lblChild")).text = "test";
          }

felmeddelandet är:
Compiler Error Message: CS0117: 'System.Web.UI.WebControls.Label' does not contain a definition for 'text'

jag har kollat på http://www.aspnextgen.com/quickstart/aspplus/samples/classbrowser/cs/classbrowser.aspx?assembly=System.Web, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a&namespace=System.Web.UI.WebControls&c lass=Label och där står de att de finns en funktion som heter text så jag förstår inte vad som är fel...

------------------
kristoffer renholm | www.renholm.com
<br>

Medlem sedan mars 20007 896 inlägg
#2

Kan det vara så jäkligt att text ska stavas med stort T? Det tror jag. C# är nämligen Case Sensitive, som jag förstått det. :)
.Text alltså.

------------------
SPiN, bjorne.w@telia.com

Medlem sedan apr. 20012 266 inlägg
#3

tack... det var de som var felet... men nu kom nästa fel:

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.NullReferenceException: Object reference not set to an instance of an object.

Source Error: 

Line 23: 
Line 24:           for (int i=0; i<navParent.Items.Count; i++) {
Line 25: 		((Label) navParent.Items[i].FindControl("lblChild")).Text = "test";
Line 26:           }
Line 27: 
 

Source File: e:\web\wwwroot\webshop\nav.aspx    Line: 25 

Stack Trace: 

[NullReferenceException: Object reference not set to an instance of an object.]
   ASP.nav_aspx.Page_Load(Object sender, EventArgs e) in e:\web\wwwroot\webshop\nav.aspx:25
   System.Web.UI.Control.OnLoad(EventArgs e) +67
   System.Web.UI.Control.LoadRecursive() +29
   System.Web.UI.Page.ProcessRequestMain() +724

eftersom jag är nybörjare på ASP.Net men har hållit på med ASP tidigare så skulle de vara treligt med mycke hjälp :)

------------------
kristoffer renholm | www.renholm.com

Medlem sedan mars 20007 896 inlägg
#4

Eftersom att jag inte programmerar i C# eller i .NET över huvud taget, så är jag inte säker på det jag skriver, men jag ser att du måste fånga ett exception som kastas.

try {
// Gör det du ska här
}
catch ( System.NullReferenceException e ) {
// Felhantering
}

I catch-blocket sköter du felhanteringen, om det blir något fel. Är det andra exceptions som ska fångas lägger du bara på ytterligare en catch-sats.

------------------
SPiN, bjorne.w@telia.com

Medlem sedan juni 20011 732 inlägg
#5

Jag gissar på att du försöker sätta texten i din label innan du databinder din repeater.


...

Repeater1.DataSource = source;
Repeater1.DataBind();

for (int i=0; i<myRepeater.Items.Count; i++) {
((Label)MyRepeater.Items[i].FindControl("myLabel")).Text = "Texten i labeln";

------------------
Jag kan inte komma på någon signatur.

Medlem sedan mars 20007 896 inlägg
#6

Men ha ändå med en try-catch, för att fånga eventuella exceptions. Det är alltid bra med kontroll.

------------------
SPiN, bjorne.w@telia.com

Medlem sedan juni 20011 732 inlägg
#7

Jupp, try/catch är suveränt! Men det känns ändå lite som om det är en farlig genväg i programmering när man behöver nästla sig ur kod som ju faktiskt genererar fel? Jag använder det nog lite för ofta i alla fall... ibland skriver man kod där man medvetet returnerar fel i vissa situationer som man sedan catchar med annan kod. Vad säger alla duktiga programmerare om sånt egentligen? Exempelvis med tanke på prestanda/stabilitet/säkerhet? Eller tänker jag fel?

------------------
Jag kan inte komma på någon signatur.

[Redigerat av NETwork den 31 jan 2002]

Medlem sedan apr. 20012 266 inlägg
#8

såhär ser min kod ut:

<%@ Page Language="C#" Debug="true" %>
<%@ Import Namespace="System.Data" %>
<%@ Import Namespace="System.Data.OleDb" %>
<html>
<head>
<title>nav.aspx</title>

<script language="C#" runat="server">

void Page_Load(Object sender, EventArgs e ) {

	string strDbCon = "Provider=SQLOLEDB;Server=(local);Database=webshop;Uid=sa;Pwd=***;";

	OleDbDataAdapter oleQuery = new OleDbDataAdapter("Select * from category", strDbCon);
	DataSet ds = new DataSet();
	oleQuery.Fill(ds, "Table");

        navParent.DataSource = ds.Tables["Table"].DefaultView;
        navParent.DataBind();

	DataTable dt = ds.Tables["Table"];

// Testar att sätta ett värde på lblChild
          for (int i=0; i<navParent.Items.Count; i++) {
		((Label) navParent.Items[i].FindControl("lblChild")).Text = "test";
          }

}
</script>

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<body bgcolor="#FFFFFF" text="#000000">
  <ASP:Repeater id="navParent" runat="server">
	<HeaderTemplate>
		<table width="100%" style="font: 8pt verdana">
	</HeaderTemplate>
	<ItemTemplate>
		<tr><td><a href='<%# DataBinder.Eval(Container.DataItem, "catid", "nav.aspx?p={0}") %>'><%# DataBinder.Eval(Container.DataItem, "strCatName") %></a></td></tr>
	</ItemTemplate>
        <FooterTemplate>
		</table>
		<asp:label id="lblChild" runat="server"/>
        </FooterTemplate>
  </ASP:Repeater>
</body>
</html>

------------------
kristoffer renholm | www.renholm.com

Medlem sedan mars 20007 896 inlägg
#9

ibland skriver man kod där man medvetet returnerar fel

Varför?! :o

Jag är väl ingen suverän programmerare, men i Java som jag programmerar en del i har jag fått en del tips på hur man ska behandla exceptions, och att man ska göra det ofta. :)

Stabiliteten bör ju endast bli bättre, eftersom det är mindre risk att man förlorar kontrollen över sina applikationer - däremot prestandan vet jag inte... Den bör inte sänkas så mycket, eftersom att catch-blocken endast körs om det verkligen blir ett fel ( Om jag har förstått det rätt ) och då behövs de ju. :)

------------------
SPiN, bjorne.w@telia.com

Medlem sedan juni 20011 732 inlägg
#10

Du har din label i din footertemplate. En footertemplate körs ju bara EN gång till skillnad från din ItemTemplate som ju loopas för varje rad i ditt dataset och du försöker ju sätta texten för varje rad i ditt dataset med en for-sats (<navParent.Items.Count)! Om du hade din label i din ItemTemplate så skulle det nog fungera, men vill du ha den i din footertemplate så ska du bara sätta texten en gång.

((Label)navParent.FindControl("lblChild")).Text = "test";

------------------
Jag kan inte komma på någon signatur.

Medlem sedan juni 20011 732 inlägg
#11

SPiN: Ibland tycker jag det är lättare att fånga upp ett fel (istället för att alltid behandlla alla händelser korrekt) och sen catcha med kod som alltid fungerar. Jag är bara en glad amatör och då får man programmera dåligt. :)

------------------
Jag kan inte komma på någon signatur.

Medlem sedan juni 20008 205 inlägg
#12

================================
ibland skriver man kod där man medvetet returnerar fel
================================

Varför?! :o

Jag är väl ingen suverän programmerare, men i Java som jag programmerar en del i har jag fått en del tips på hur man ska behandla exceptions, och att man ska göra det ofta.
Det där är ju en avvägningsfråga. Eftersom ev. fel oftast påvisas i användargränssnittet är det inte så bra om man fångar varje undantag där det kan träffas och därifrån visar felmeddelande, så ibland är det bra att låta ett undantag att segla uppåt i hierarkin av anrop. Förr eller senare ska det förstås fångas, men det behöver inte vara så långt ner som möjligt...

------------------
God is real, unless declared integer.

243 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
119 ms — deklarationer (db)
0 ms — hämta statistik (cache)
122 ms — hämta tråd, inlägg och bilagor (db)
118 ms — ändringar (db)