ASP.NET: XML-gästbok, visar inte nyligen tillagd post

Trädvy Permalänk
Medlem
Registrerad
Dec 2003

ASP.NET: XML-gästbok, visar inte nyligen tillagd post

Hej,

Sitter med en skoluppgift där vi skall skapa en simpel gästbok med en XML-fil som datakälla. Jag har dock stött på ett problem. Posterna hämtas från XML-filen utan problem men när en ny post skapas så visas den inte för ens efter ytterligare en uppdatering av sidan. Jag använder mig av en XmlDataSource som jag binder till en DataList. Plockar sedan utan datan med hjälp av XPath.

guestbook.xml:

<guestbook> <entry name="Bert" date="2009-07-20 16:27:14">Hej</entry> </guestbook>

guestbook.aspx:

<h1>Gästbok</h1> <asp:XmlDataSource ID="GuestbookDataSource" runat="server" DataFile="~/App_Data/guestBook.xml" XPath="/guestbook/entry"></asp:XmlDataSource> <asp:DataList ID="GuestbookDataList" DataSourceID="GuestbookDataSource" runat="server"> <ItemTemplate> <div class="guestbookEntry"> <h3><%# XPath("@name")%></h3> <p class="date"> <%# XPath("@date")%> </p> <p> <%# XPath(".") %> </p> </div> </ItemTemplate> </asp:DataList> <div id="composeMessage"> <h2>Skriv ett inlägg</h2> <asp:TextBox ID="message" runat="server" TextMode="MultiLine"></asp:TextBox> <p> <asp:LinkButton ID="SendButton" runat="server" CssClass="button"><div>Skapa</div></asp:LinkButton> </p> </div>

guestbook.aspx.cs:

protected void SendButton_Click(object sender, EventArgs e) { { // Öppna XML-dokumentet. System.Xml.XmlDocument xmlGuestbook = new System.Xml.XmlDocument(); xmlGuestbook.Load(Server.MapPath("~/App_Data/Guestbook.xml")); System.Xml.XmlNode rootNode = xmlGuestbook.DocumentElement.FirstChild; // Skapa ett nytt element med två attribut System.Xml.XmlElement nodeGuestbookEntry = xmlGuestbook.CreateElement("entry"); nodeGuestbookEntry.SetAttribute("name", Membership.GetUser().UserName); nodeGuestbookEntry.SetAttribute("date", DateTime.Now.ToString()); nodeGuestbookEntry.InnerText = Server.HtmlEncode(message.Text); // Lägg till elementet till XML-filen xmlGuestbook.DocumentElement.InsertBefore(nodeGuestbookEntry, rootNode); xmlGuestbook.Save(Server.MapPath("~/App_Data/Guestbook.xml")); // Uppdatera datalisten (?) GuestbookDataList.DataBind(); } }

Någon har en lösning på problemet?

//Carl

Trädvy Permalänk
Medlem
Plats
Göteborg
Registrerad
Jun 2004

Förändras XML-filen då? Eller funkar det inte alls?

Prova lägga till EnableCaching="false" på din XmlDataSource. Egentligen anpassar man inställningarna utefter hur många besökare man ska ha. Men eftersom det är ett skolarbete kan du stänga av caching helt tills vidare.

Annars är t.ex. dessa mer vettiga:

<asp:XmlDataSource runat="server" ID="GuestbookDataSource" DataFile="~/App_Data/guestBook.xml" XPath="/guestbook/entry" EnableCaching ="True" CacheDuration="60" CacheExpirationPolicy="Sliding" />

Trädvy Permalänk
Medlem
Registrerad
Dec 2003
Citat:

Ursprungligen inskrivet av azoapes
Förändras XML-filen då? Eller funkar det inte alls?

Prova lägga till EnableCaching="false" på din XmlDataSource. Egentligen anpassar man inställningarna utefter hur många besökare man ska ha. Men eftersom det är ett skolarbete kan du stänga av caching helt tills vidare.

Annars är t.ex. dessa mer vettiga:

<asp:XmlDataSource runat="server" ID="GuestbookDataSource" DataFile="~/App_Data/guestBook.xml" XPath="/guestbook/entry" EnableCaching ="True" CacheDuration="60" CacheExpirationPolicy="Sliding" />

Ja, XML-filen ändras ändå. EnableCaching="false" löste problemet Tack så mycket!