Behålla position på scrollbars

Det jag sökte var att kunna behålla positionen på scrollbars efter postback, men bara på vissa knappar. I Asp.Net kan man ju använda SmartNavigation till detta men det fungerar bara i IE (när jag provade senast) och ger en del oväntade buggar som bieffekt. Sen finns det också MaintainScrollPositionOnPostback, som man kan lägga i @Page-direktivet men då sker ompositionering på alla länkar och knappar som utlöser postback. Ibland vill man bara att vissa typer av postningar ska göra det.

Lösningen som använder javascript och två gömda input-fält hittade jag i detta forumet skrivet av Fredrik Normén

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >

<head runat="server">
<title>Scrollbar position</title>
<script language="javascript">
function SetScrollerPosition()
{
if (document.getElementById("XPos").value != "")
{
var x = document.getElementById("XPos").value;
var y = document.getElementById("YPos").value;
window.scrollTo(x, y);
}

document.getElementById("XPos").value = "0";
document.getElementById("YPos").value = "0";
}

function GetScollerPosition()
{
var scrollX, scrollY;

if (document.all)
{
if (!document.documentElement.scrollLeft)
scrollX = document.body.scrollLeft;
else
scrollX = document.documentElement.scrollLeft;

if (!document.documentElement.scrollTop)
scrollY = document.body.scrollTop;
else
scrollY = document.documentElement.scrollTop;
}
else
{
scrollX = window.pageXOffset;
scrollY = window.pageYOffset;
}

document.getElementById("XPos").value = scrollX;
document.getElementById("YPos").value = scrollY;
}
</script>
</head>
<body onload="SetScrollerPosition();">
<form id="form1" runat="server">
<div>
<asp:GridView …>
<Columns>
<asp:TemplateField ShowHeader="False">
<ItemTemplate>
<asp:LinkButton
OnClientClick="GetScollerPosition();"
ID="LinkButton1"
runat="server"
CommandName="Edit"
Text="Edit"></asp:LinkButton>
<asp:LinkButton
ID="LinkButton2"
runat="server"
CommandName="Select"
Text="Select"></asp:LinkButton>
<asp:LinkButton
ID="LinkButton3"
runat="server"
CommandName="Delete"
Text="Delete"></asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
</div>
<input type="hidden" id="XPos" runat="server" />
<input type="hidden" id="YPos" runat="server" />
</form>
</body>
</html>

Under mitt googlande efter detta hittade jag även ett annat intressanta demo på samma ämne. Detta rullar ner en div med overflow till nedersta positionen så fort man lägger till någon i den. Perfekt om man ska göra en AJAX-chatt eller liknande. Detta kommer jag igång att jag försökt lösa tidigare utan lycka.

By Jesper Lind

Junkyard.se öppnar inför hösten

http://www.codeodyssey.se/upload/resource/blog/Junkyard_goes_mega.jpg

Här kommer en liten uppdatering om e-handelsidan Junkyard.se. Ni som känner till sidan väl vet den brukar stängas ner i minst en vecka före säsongsstart. Inatt öppnade vi den igen (enligt tradition cirka 26 timmar försenat).

Som vanligt har vi passat på att göra lite förändringar. Nu finns det två nya avdelningar. Dels Mega Store där man kan se alla produkter från alla avdelningar. Besökarna tyckte det var lite jobbigt att först söka igenom Street avdelningen efter t ex skor och sedan leta på Skate avdelningen. Så nu blir det lite lättare att få överblick. Sen har vi även Moto Store där FMX fans och motor intresserade kan hitta en del roligt.

Design av Fakepilot.com.

By Jesper Lind

Validera mot webbstandarder

Att se till att en hemsida följer webbstandarderna från W3C är väldigt viktigt ifall man vill att designen ska fungerar bra på alla olika läsare. Annars förlitar man sig på hur bra (och hur) läsaren hanterar felen. Resultatet kan då variera stort.

Måste erkänna att jag aldrig direkt har kämpat för detta tidigare. Webben har helt enkelt känts för "trasig" för att man ska orka bry sig. Men när nu IE7 är på gång och Microsoft verkar ta webbstandarderna på allvar, så känns det värt att börja rensa sina egna alster från icke-validerad kod. Okej då kör vi!

1. Validera som XHMTL Transitional
Nu lyckade jag för första gången skapa en webbsida (den här bloggen) som validerar som XHTML 1.0 Transitional.

Valid XHTML 1.0 Transitional

Min startsida som innehåller flash blev dock lite svårare att få att validera som XHTML pågrund av att den innehåller en flashfilm. Hittade en bra artikel på ämnet men den hjälpte mig tyvärr inte hela vägen.

Denna sida har fortfarande några fel i DOCTYPE Strict men det tar jag en annan dag... Här finns en länk om skillnaderna mellan transitional och strict och ytterligare läsning om varför det är så viktigt att ange en korrekt DOCTYPE.

2. Validera som giltig CSS
Nästa steg blir CSS validering, detta gick ju fint också.

Valid CSS!

Fick dock en hel del varningar - bland annat som säger "You have no color with your background-color" och liknade. Detta beror på de nya W3C reglerna som introducerades nyligen. Att följa dessa kan dock skapa en del oväntade effekter. Så jag väljer att ha kvar varningarna - de är du endå bara varningar.

3. Validera ett RSS-flöde
RSS-flödet i min blogg är också riktig. Fick en varning på kodningen:

"Your feed appears to be encoded as "iso-8859-1", but your server is reporting "US-ASCII""

Detta såg jag många som haft problem med men hittade ingen lösning.

[Valid RSS]

By Jesper Lind

Första skarpa versionen av IE7

Nu verkar det närma sig det datum då Internet Explorer 7 kommer att släppas på marknaden. Idag meddelades det att IE7 Release Candidate 1 finns tillgänglig för nedladdning. Den officiella IEBloggen är het och det postas uppdateringar i stort sätt varje dag. Microsoft verkar ha lyssnat på webbutvecklarnas anmärkningar på brister och fixat en hel del buggar som har med CSS-rendereringen att göra. Bland annat 16 av de buggar som har rapporterats för IE6 på PositionisEverything.net.

I denna versionen har funktionalitet som avinstallerar föregående betaversioner automatiskt, lagts till. Det går dock fortfarande inte att köra IE6 parallellt med nya IE7. Som en eventuell lösning på detta verkar Microsoft ge bort Microsoft Virtual PC gratis. Tanken är att man ska installera IE6 i den virtuella datorn för att kunna testa hur webbsidor ser ut. Det kan ju vara en lösning på det problem jag skrivit om tidigare, men ska det inte kunna gå på något enklare sätt? Ett flexa-till-IE6-mode i själva läsaren eller andra lösningar efterlyses!

Det känns det som att IE7 bli ett stormsteg mot bättre stöd för CSS2-standarden på internet. Nu kommer det bli bra mycket enklare att skapa design som håller i alla moderna webbläsare.

By Jesper Lind

Lägg till appSettings värden

följande visar hur man kan lägga till appSettings till genom code behind.


Configuration config = ConfigurationSettings.OpenWebConfiguration("~");

AppSettingsSection appSettingsSection = config.AppSettings;

appSettingsSection.Settings["MinNyckel"] = "Värdet som ska sparas!";

config.Save();

By Jesper Lind

Förhindra blinkande bilder - IE6

Bilder som blinkar fast man inte vill det kan vara jobbigt.

Detta händer ofta när man har transparenta gifs som bakgrund på länkar. De kommer då att blinka när man drar pekaren över länken pågrund av att Internet Explorer 6 laddar om bilden varje gång. Det händer speciellt när användaren har ställt in "Uppdatera cache varje gång sidan besöks". En rätt vanlig inställning.

Här finns en bra guide på ämnet och om hur man kan förhindra det:
http://www.fivesevensix.com/studies/ie6flicker/

By Jesper Lind

Använda FTP med webbläsare

Jag glömmer ofta syntaxen för hur man loggar in på en FTP server genom en webbläsare. Detta är ett exempel. Byt ut Användarnamn, lösenord och domännamn (eller IP) mot dina egna uppgifter.

ftp://AnvändarNamn:Lösen@www.domännamn.se/

By Jesper Lind

Transaktioner med Asp.net

Här kommer jag skriva lite om hur man genomför databas transaktioner i Asp.Net. Alltså så man kan välja att genomföra eller att avbryta en uppdateringen i databasen beroende på andra faktorer. Exemplen är för SQL Server.

SqlTransaction trans = null;
try
{
conn = new SqlConnection ( . . . );
conn.Open();
trans = conn.BeginTransaction();
cmd = new Command();
cmd.Connenction = conn;
cmd.Transaction = trans;
cmd.ExecuteNonQuery();

}
catch(Exception objException)
{
if(trans!=null)
trans.Rollback();
}
finally
{
if(conn!=null)
conn.Close();
}

Mer läsning
Läs en artikel om hur man kan koppla en transaktion till en OleDbDataReader. http://www.c-sharpcorner.com/asp/Code/TransactionsInASPNETDPL.asp

By Jesper Lind

Ny tjänst från Microsoft underhåller datorn

Microsoft lanserar webbplatsen Windows Live Onecare Safety Scanner. Tjänsten söker igenom datorn efter virus och andra säkerhetshot, ökar datorns prestanda och är gratis att använda.

Besök hemsidan på nedanstående länk. Du måste använda Internet Explorer för att det ska fungera eftersom Actice-X kontroller installeras.

Windows Live Onecare Safety Scanner

By Jesper Lind

Ladda upp filer till server

Läs om hur man laddar upp bilder med FileUpLoad i Asp.Net C#.


<asp:Label id="lblMessage" runat="server">
<br />
<br />
<asp:FileUpLoad id="fuImage" runat="server" />

<asp:RegularExpressionValidator
id="fuValidator" runat="server"
ErrorMessage="Upload Jpegs and Gifs only."
ValidationExpression="^(([a-zA-Z]:)|(\\{2}\w+)\$?)(\\(\w[\w].*))(.jpg|.JPG|.gif|.GIF)$"
ControlToValidate="fuImage">
</asp:RegularExpressionValidator>

<asp:Button id="buttonUpload" Text="Upload File" OnClick="buttonUpload_Click" runat="server" Width="105px" />

Lägg till följande funktion i klassfilen.

protected void buttonUpload_Click(object sender, EventArgs e)
{
if (fuImage.HasFile)
{

fuImage.SaveAs(@"C:\temp\" + fuImage.FileName);
lblMessage.Text = "Fil laddades upp: " + fuImage.FileName ;
}
else
{
lblMessage.Text = "Det fanns ingen fil i formuläret!";
}
}

Standarstorlek på uppladdning i FileUpload är 4MB. För att ändra på detta måste följande värde ändras i machine.config. Värdet anges i KB.

<httpRuntime maxRequestLength = "4096" />

Mer läsning
C-sharpcorner om FileUpload
Fredrik Normén - om hur man laddar upp flera filer åt gången
Artikel på aspnetresources.com om filuppladdning med exempel på hur man lägger till FileUpload kontroll genom javascript.

By Jesper Lind