Hej. Ett sätt att lösa det på är att istället för att ta bort articleId history pointen så ändrar man bara articleId=0 när man stänger produktfönstret. I navigate eventet kollar jag sedan att articelId != 0ASP.NET 3.5 Ajax och Browser History
Jag har provat denna nya Ajax-funktion som kommer med 3.5 SP1 av .Net.
Allså att få back/forward stöd i webläsaren för Ajax, samt att folk kan direktlänka till en ajaxfuntkion genom att klippa ut urlen i addressfönstret.
Ovanstående funkar bra, urlen blir /?id=1#articleId=10
Där #articleId=10 betyder att produkt med ID 10 ska visas, detta funkar kanon.
Men nu till de två problemen jag har
1) Client side triggar clienten ett ajax anrop för att visa produkten, i denna js-metod kör jag koden för att lägga till en historypoint
code:
Sys.Application.addHistoryPoint({articleId: article.Id});
Nu hamnar #articleId i urlen
Men nu triggas även stateChangeMetoden (Den som triggas när en användare klickar på back/forward button eller när en användare går in på sidan med #articleId i urlen) I den metoden kör jag ju js-metoden för att visa produkten och då blir det ju rundgång eftersom addHistoryPoint körs igen, på server side kan man avgöra om ScriptManager befinner sig i Navigate mode och på så sätt inte lägga till historyPoint, men jag har inte hitttat nått liknande om client side.
Koden för state changed
code:
function onStateChanged(sender, e)
{
if(e.get_state().articleId != null) {
ShowArticle(e.get_state().articleId);
}
}
Detta problem går att kringå genom att skriva egen kod för att avgöra om man navigerar eller inte, men det måste ju finnas stöd i clientside apiet eftersom det finns stöd för det i serverside apiet.
2) Nu till det större problemet. Efter att man addad en historyPoint så får ju urlen #articleId=x. Om jag nu triggar en postback på sidan, så kommer ju stateChanged triggas och produkten visas igen. Jag vill allså ta bort den från urlen, eller alternativt adda en ny historypoint när man trycker på "stäng" för produkten. Men addar jag en historyPoint #close=1 så kommer urlen bli #articleId=x&close=1. Apiet måste ju stödja att man tar bort en point?Sv: ASP.NET 3.5 Ajax och Browser History
vet inte om detta är det bästa sättet att lösa det på, men det funkar iallafall