Roundtrip
Børre Stenseth
Moduler>Websites>Enkel beregning

En enkel interaktiv vevside

Hva
En svært enkel interaktiv vevside

En veldig enkel vevside som benytter C# som språk for å generere innhold. Siden tar imot antall og pris, multipliserer de to og oppdaterer et felt med resultatet.

Det er ikke noen inputkontroll på klienten og det er ikke gjort noe for å få til pen eller fornuftig layout på siden.

Vi legger C#-koden på en egen fil, "Code behind" - strategien. Vi får da 2 filer: 1 fil som representerer selve HTML-sida (Default.aspx) med referanse til C#-koden og en fil med selve C#-koden (Default.aspx.cs).

aspx fila blir slik:

<%@ Page Language="C#" AutoEventWireup="true"  
         CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" 
          "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <h1>Beregn pris</h1>
    <form id="form1" runat="server">
    <div>
        <div>
            Antall: 
            <asp:TextBox ID="Antall" runat="server" Width="39px">
            </asp:TextBox>
            Stykkpris: 
            <asp:TextBox ID="Stykkpris" runat="server" Width="37px">
            </asp:TextBox>
        </div>
        <div>
        <asp:Button ID="Button1" runat="server" 
                    OnClick="Button1_Click" Text="Beregn" Width="80px" />
        <asp:TextBox ID="Resultat" runat="server" Width="77px">
        </asp:TextBox>
        <asp:Label ID="Label_error" runat="server" ForeColor="Red">
        </asp:Label>
        </div>
    </div>
    </form>
</body>
</html>

cs fila blir slik:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page 
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            int count = Convert.ToInt32(Antall.Text);
            int prize = Convert.ToInt32(Stykkpris.Text);
            Resultat.Text = (count * prize).ToString();
            Label_error.Text = "";
        }
        catch (Exception ex)
        {
            Label_error.Text = "ugyldig input";
            Resultat.Text = "?";
        }
    }
}
Du kan teste den herhttp://donau.hiof.no/borres/dn/web2/Default.aspx

"round-trip"

Denne løsningen representerer det som ofte kalles en typisk "round-trip". Vi fyller ut data på en form på siden (antall og stykkpris), sender dataene til serveren som gjør beregninger, oppdaterer siden (resultat) og sender den tilbake. Vi ser av CS-koden at vi kan identifisere komponentene på siden (i formen) direkte som objekter.

I denne typiske sekvensen sender vi samme side tilbake med oppdatert innhold. Vi kan selvsagtt gjøre andre ting enn det, vi kan sende tilbake en annen side, eller vi kan sende tilbake andre deler av samme side, eller vi kan sende tilbake fragmenter av en side.

Videre ser vi av koden at jobben på tjeneren kun bruker data som ligger på feltene på siden. Siden vi har tilgang til et så kraftig språk som C# på tjeneren er det lett for oss å bruke de allminnelige bibliotekene i C# til å programmere hva vi vil på tjeneren, databaseoppslag, bruk av Webservices, XML-parsing osv.

Merk at dårlig formatert input plukkes opp på tjeneren som unntakshandtering i en konvertering. Fristenede og enkelt, men det er gode argumenter for at denne typen inputkontroll burde foregå på klienten, før dataene (formen) sendes. I så fall er verktøyet Javascript. Visual Studio støtter oss også i noe slik inputkontroll ved å generere Javascript for en del situasjoner.

Referanser
Prosjekt:
https://svn.hiof.no/svn/psource/Csharpsites/web2
Vedlikehold

B.Stenseth, revidert januar 2007

(Velkommen) Moduler>Websites>Enkel beregning (Inspeksjon)