Avatar billede nat Nybegynder
05. juni 2005 - 14:20 Der er 16 kommentarer og
1 løsning

c# fange exception fra .cs fil i aspx.cs filen

Jeg har en klasse  med metode (AddEmp) der opretter en Employe i en database. Det er ikke muligt at oprette en employee med samme e-mail da feltet er unikt. Det fanger jeg fint med en try/catch i AddEmploy, men hvordan får jeg skrevet det ud til brugeren på Tilføj employee siden (aspx.cs). Hvor jeg "sidst" i min kode gør følgende:
Employee.AddEmployee(emp);
Hvordan fanger jeg at emp ikke er blevet indsat pga. unik email? og kan skrive dette ud til brugeren på Tilføj employee siden?
Avatar billede arne_v Ekspert
05. juni 2005 - 14:28 #1
Kan du ikke i catch delen sætte en label som ellers er blank ?
Avatar billede nat Nybegynder
05. juni 2005 - 15:30 #2
Hvordan laver jeg en label i en "ekstern" .cs klassefil - og får den vist ovre på min aspx side?
Avatar billede arne_v Ekspert
05. juni 2005 - 15:36 #3
<asp:label id="fejlbesked" runat="server"/>

og

fejlbesked.Text = "Employee ekseisterer allerede - prøve igen";
Avatar billede nat Nybegynder
05. juni 2005 - 16:36 #4
Er ikke helt med, jeg kan da ikke skrive <asp:label.... inde i en cs fil, skal det ikke skives i aspx.cs siden... og en sådan er der netop ikke på min AddEmp klasse side, da det er en "ekstern" klasse fil...
Avatar billede arne_v Ekspert
05. juni 2005 - 16:38 #5
du kan ikke vise brugeren noget på fornuftig vis uden at have noget i din .aspx
Avatar billede arne_v Ekspert
05. juni 2005 - 16:39 #6
hvad gør du i tilfælde af en "normal" database connection fejl ?
Avatar billede nat Nybegynder
05. juni 2005 - 17:09 #7
jeg har en try catch uden om min database connection, som ligger i den ekstene klasse fil. Og mit problem er netop, at jeg gerne vil kunne vise brugeren noget på skærmen hvis det går galt i connectionen... Men hvordan får jeg fat i den exception der bliver kastet ovre i cs-filen?
Avatar billede arne_v Ekspert
05. juni 2005 - 18:39 #8
Lyder som om du catcher dine exceptions for langt nede. Hvis du catcher
dine exceptions et sted hvor du ikke kan gøre noget ved den, så er der ikke meget
pointe i at catche dem.

Flyt try catch ud på et niveau, hvor du kan gøre noget fornuftigt. I en web
app vil det typisk være i .aspx.cs filen.

Hvor du gerne vil have en god opdeling i lag, så catcher du exceptions nede
i den database klasse og thrower en ny exception som du har defineret - og den
catcher du oppe i din code behind.
Avatar billede nat Nybegynder
05. juni 2005 - 19:32 #9
>>- og den catcher du oppe i din code behind.

Ja men hvordan får jeg fat i den :( For jeg fanger jo en exception i mit databaselag, men kan ikke fange den i min code behind...
Avatar billede arne_v Ekspert
05. juni 2005 - 19:34 #10
virker try catch ikke der ??
Avatar billede nat Nybegynder
05. juni 2005 - 21:10 #11
Min try catch virker fint kan bare ikke fange den længere oppe, da jeg ikke ved hvordan, ellers er det måske mig der misforstår???
virker ikke som om at jeg kan komme videre herfra. Så jeg lukker. Vil du have pointne???
Avatar billede arne_v Ekspert
05. juni 2005 - 21:13 #12
skal jeg prøve at lave et eksempel ?
Avatar billede arne_v Ekspert
05. juni 2005 - 21:33 #13
kommer her
Avatar billede arne_v Ekspert
05. juni 2005 - 21:34 #14
exception.aspx
--------------

<%@ Page Language="C#" CodeBehind="exception.aspx.cs" Inherits="Arne.RanNum" %>
Tilfældigt tal: <asp:label id="rannum" runat="server"/><asp:label id="errmsg" runat="server"/>

exception.aspx.cs
-----------------

using System;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;

namespace Arne
{
    public class RanNum : Page
    {
        protected Label rannum;
        protected Label errmsg;
        public void Page_Load(Object src, EventArgs e)
        {
            try
            {
                rannum.Text = NumGen.GenOne().ToString();
                errmsg.Text = "";
            }
            catch(NumException ex)
            {
                rannum.Text = "";
                errmsg.Text = ex.Message;
            }
        }
    }
}

nums.cs
-------

using System;

namespace Arne
{
    public class NumException : Exception
    {
        public NumException(string s) : base(s)
        {
        }
    }
    public class NumGen
    {
        private static Random rng = new Random();
        public static int GenOne()
        {
            int num = rng.Next(10);
            if(num == 0)
            {
                throw new NumException("Oops we got a zero");
            }
            return num;
        }
    }
}
Avatar billede arne_v Ekspert
05. juni 2005 - 21:37 #15
NumGen svarer til din database klasser.

Enten passer den en SqlException videre til din code behind kode eller
så catcher den SqlException og thrower en new DinHeltEgenException.

Din code behind catcher så den excpetion uanset om det er en SqlException
eller en DinHeltEgenException og displyer et eller andet til brugeren.

Ja mit eksempel er lidt minimalistisk, men jeg havde ikke lyst til at skrive en fuld DAL.

:-)
Avatar billede arne_v Ekspert
05. juni 2005 - 21:37 #16
og et svar
Avatar billede nat Nybegynder
06. juni 2005 - 16:24 #17
arne_v: tak for eksempel, jeg prøver at se på det :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester