Kan du visa lite kod?
Rent generellt så måste saker som ajax skall updatera dynamiskt ligga i en updatepanel.
13 svar · 559 visningar · startad av saw
Jag har börjat att titta lite på Ajax, och fått lite att fungera men...
Jag har en label, som inte ligge i en UpdatePanel. Via codebehind so ville
jag skriva lite text (dynamiskt). Jag kan se labelen via intilenze(eller vad det
nu heter) men om jag skriver in lite text till labelen, så får jag svaret att
labelen inte tillhör den aktuella kontexten.
Hur löser man det???
Kan du visa lite kod?
Rent generellt så måste saker som ajax skall updatera dynamiskt ligga i en updatepanel.
Ok här kommer lite:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Label ID="info" runat="server" Style="position: relative" Text="" Width="53px"></asp:Label>
<asp:GridView ID="GridView1" runat="server"
//längre ner
<asp:DetailsView ID="DetailsView1" runat="server" AutoGenerateRows="False" DataKeyNames="Id"
//och
<asp:AccessDataSource ID="AccessDataSourceGrid"
//och
<asp:AccessDataSource ID="AccessDataSource1" runat="server"
//i codebehind
sql = "SELECT Count(klassKamrater.Id) AS AntalförId FROM klassKamrater;";
info.Text = "Antal registrerade klasskamrater: " + Webbutill.OleDbCount(sql,
DBConn) + " st";
Skall sägas att innan jag försökte konvertera detta till AJAX, så fungerade allt
bra.
Efter mycket krabb så delitade jag filen(default.aspx) och började om ifrån
början, men jag fasnar på exact samma punkt.
OBS
De koder som jag visar, är bara liate granna, det skulle ta för stort utrymme
för att visa allt.
Får inte ut så mycket av koden, men jag kan tillägga att om du vill uppdatera en UpdatePanel ifrån codebehind så anropar du UpdatePanel.Update() där du vill göra det.
Tack för tipset, men fortfarande varför kan jag inte komma åt t ex labellen info
ifrån codebehind?
Nu åkte jag på pumpen igen.
UpdatePanel.Update();
//error:
Error 1 En objektreferens krävs för det icke-statiska fältet,
metoden eller egenskapen System.Web.UI.UpdatePanel.Update()
C:\Inetpub\wwwroot\KlassKamrater\Default.aspx.cs 36 9 C:\...\KlassKamrater\
Är det inte en using som jag behöver här??
Nej, men du ska referera till instansen, inte till klassen. I ditt fall är det alltså
UpdatePanel1.Update()
Jag gör ju så här:
protected void DetailsView1_ItemDeleted(object sender,
DetailsViewDeletedEventArgs e)
{
UpdatePanel.Update();
}
Är det inte så ni menar?
Nej, du måste använda instansen, och den har du döpt till UpdatePanel1 enligt din kod längst upp:
protected void DetailsView1_ItemDeleted(object sender,
DetailsViewDeletedEventArgs e)
{
info.Text = "Updaterar... ";
UpdatePanel1.Update();
}
Givetvis Vide, jag såg inte att jag skrev fel.
Och nu har vi kommit till pudlens kärna:
Error 1 Namnet UpdatePanel1 finns inte i den aktuella kontexten
C:\Inetpub\wwwroot\KlassKamrater\Default.aspx.cs 41 9
C:\...\KlassKamrater\
Jag är alltså tillbaka till min ursprungliga fråga, jag kan alltså tydligen inte anropa en kontroll ifrån kodebehind.
Jag lägger upp min default.aspx som en textfi och hoppas att någon kan hitta
någon dummhet som jag har gjort. ;) l
Kan du lägga upp .cs-filen också där själva anropet är?
I och för sig så tror jag inte att det hjälper, men bara för att det är du Vide ;)
Jag har bortkommenterat det mesta, och jag har inte mycket koder där...
Men alltså, i Default.aspx finns ju inget Label-objekt som heter info (enligt det du bifogade), eller har du bara missat att visa det i filen?
Nej jag har taget bort den eftersom jag tröttnade på att den inte fungerade.