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
11 svar · 299 visningar · startad av renholm
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>
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
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
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
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.
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
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]
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
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
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.
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.
================================
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.