Henris blogg

 

c#: mappe/caste automatisk fra en klasse til en annen

Ved å lage en ny metode kan vi automatisk konvertere et objekt til et annet.

Uten å måtte caste eller lage egne mapping-funksjoner.

 

Ønsker du kun eksplisitt konvertering kan du bruke nøkkelordet explicit i stedet for i metodedefinisjonen.

 

 

(Denne koden utvider samtidig en klasse som er returnert/generert automatisk fra en Webtjeneste,

og legger til en ny metode på denne vha partial class.

Dersom du skal gjøre det må du passe på at namespacene er like for

klassen i Reference.cs og din utvidede klasse)

 

 

 

Eksempel:

 

namespace BOHjelpeklasser

{

    namespace ProsesserAgent

    {

        /// <summary>

        /// Utvider classen returnert fra ProsesserAgent med hjelpemetoder

        /// </summary>

        public partial class BrukerEntitetExt :Entitet

        {

           

            static public implicit operator BrukerEntitet(BrukerEntitetExt bruker)

            {

                var retur = new BrukerEntitet()

                {

                    arbeidsgiver = bruker.arbeidsgiver,

                    brukerID = bruker.brukerID,

                    epostadresse = bruker.epostadresse,

                    etternavn = bruker.epostadresse,

                    fornavn = bruker.fornavn,

                    host = bruker.host,

                    ID = bruker.ID,

                    IsUptodate = bruker.IsUptodate,

                    poststed = bruker.poststed,

                    rådgivernummer = bruker.rådgivernummer,

                    Tag = bruker.Tag,

                    telefonnummer = bruker.telefonnummer

                };

 

 

                return retur;

            }

        }

     }

 

}

Comments [0]

Oppdatert CookieUtil

Oppdatert cookieutil som tar med brukernavn i cookie, og sletter cookie dersom dette har endret seg, dvs ny bruker har logget på samme maskin.

   1:      /// <summary>
   2:      /// util for å serialize /deserialize objekter til cookies
   3:      /// </summary>
   4:      public static class CookieUtils
   5:      {
   6:   
   7:          /// <summary>
   8:          /// Henter satt cookie som object, returnerer null hvis cookie ikke finnes
   9:          /// </summary>
  10:          /// <param name="navn"></param>
  11:          /// <returns></returns>
  12:          public static T GetCookie<T>(string navn) where T : class, new()
  13:          {
  14:   
  15:              try
  16:              {
  17:   
  18:                  HttpCookie c = HttpContext.Current.Request.Cookies[navn];
  19:                  if (c == null || string.IsNullOrEmpty(c.Value))
  20:                      return default(T);
  21:   
  22:   
  23:                  string[] verdier = c.Value.Split('|');
  24:                  
  25:   
  26:   
  27:                  //fjern cookie hvis den er for en annen bruker
  28:                  string brukerident = verdier[0]; //første==brukerident
  29:                  if (brukerident != Kontroller.HentCurrentUser())
  30:                  {
  31:                      SlettCookie(navn);
  32:                      return default(T);
  33:                  }
  34:                  int n = 1; //start på 1, 0==brukerident...
  35:                  T objekt = new T();
  36:   
  37:                  Type type = objekt.GetType();
  38:                  //Type type = objekt.GetType();
  39:                  FieldInfo[] felter = type.GetFields();
  40:                  foreach (FieldInfo feltinf in felter)
  41:                  {
  42:                      feltinf.SetValue(objekt, verdier[n++]);
  43:                  }
  44:   
  45:                  PropertyInfo[] props = type.GetProperties();
  46:                  foreach (PropertyInfo propinf in props)
  47:                  {
  48:                      SetProperty(propinf, verdier[n++], objekt);
  49:                  }
  50:   
  51:   
  52:   
  53:                  return objekt;
  54:              }
  55:              catch (Exception ex)
  56:              {
  57:                  throw new BasisException(ex);
  58:              }
  59:   
  60:   
  61:          }
  62:          /// <summary>
  63:          /// Lager cookie av gjeldende objekt som utløper om 10 timer
  64:          /// </summary>
  65:          /// <param name="navn"></param>
  66:          /// <param name="objekt"></param>
  67:          public static void SetCookie(string navn, object objekt)
  68:          {
  69:              SetCookie(navn, objekt, DateTime.Now.AddHours(10));
  70:          }
  71:   
  72:          /// <summary>
  73:          /// Lager cookie av gjeldende objekt
  74:          /// </summary>
  75:          /// <param name="navn"></param>
  76:          /// <param name="objekt"></param>
  77:          /// <param name="utløper"></param>
  78:          public static void SetCookie(string navn, object objekt, DateTime utløper)
  79:          {
  80:   
  81:   
  82:              try
  83:              {
  84:   
  85:                  StringBuilder streng = new StringBuilder();
  86:                  streng.Append(Kontroller.HentCurrentUser() + "|");
  87:                  Type type = objekt.GetType();
  88:                  FieldInfo[] felter = type.GetFields();
  89:                  foreach (FieldInfo feltinf in felter)
  90:                  {
  91:                      if (feltinf != null)
  92:                      {
  93:                          object verdi = feltinf.GetValue(objekt);
  94:                          streng.Append(verdi.ToString() + "|");
  95:   
  96:                      }
  97:                  }
  98:   
  99:                  PropertyInfo[] props = type.GetProperties();
 100:                  foreach (PropertyInfo propinf in props)
 101:                  {
 102:                      if (propinf != null)
 103:                      {
 104:                          object verdi = propinf.GetValue(objekt, null);
 105:                          streng.Append(verdi.ToString() + "|");
 106:                      }
 107:                  }
 108:   
 109:                  HttpCookie c = new HttpCookie(navn, streng.ToString());
 110:   
 111:                  c.Expires = utløper;
 112:   
 113:                  if (HttpContext.Current.Request.Cookies[navn] != null)
 114:                      //finnes fra før
 115:                      HttpContext.Current.Response.Cookies.Set(c);
 116:                  else
 117:                      //finnes ikke, lag ny
 118:                      HttpContext.Current.Response.Cookies.Add(c);
 119:   
 120:              }
 121:              catch (Exception ex)
 122:              {
 123:                  throw new BasisException(ex);
 124:              }
 125:          }
 126:   
 127:   
 128:          /// <summary>
 129:          /// sletter en satt cookie 
 130:          /// (resetter verdi og setter utløpsdato tilbake i tid)
 131:          /// </summary>
 132:          /// <param name="navn"></param>
 133:          public static void SlettCookie(string navn)
 134:          {
 135:              //tømmer verdi og setter utløpt for ett år siden
 136:              HttpCookie c = new HttpCookie(navn, "");
 137:              c.Expires = DateTime.Now.AddYears(-1);
 138:   
 139:              if (HttpContext.Current.Request.Cookies[navn] != null)
 140:                  //finnes fra før
 141:                  HttpContext.Current.Response.Cookies.Set(c);
 142:   
 143:          }
 144:   
 145:   
 146:   
 147:   
 148:   
 149:          /// <summary>
 150:          /// Hjelpemetode for å sette en verdi via reflection etc
 151:          /// </summary>
 152:         /// <param name="pInfo"></param>
 153:         /// <param name="propertyValue"></param>
 154:         /// <param name="objectToSetValue"></param>
 155:          private static void SetProperty(PropertyInfo pInfo, string propertyValue, object objectToSetValue)
 156:          {
 157:              Type pType = pInfo.PropertyType;
 158:   
 159:              if (pType == typeof(string))
 160:                  pInfo.SetValue(objectToSetValue, propertyValue, null);
 161:              else if (pType == typeof(bool))
 162:                  pInfo.SetValue(objectToSetValue, Convert.ToBoolean(propertyValue), null);
 163:              else if (pType == typeof(int))
 164:                  pInfo.SetValue(objectToSetValue, Convert.ToInt32(propertyValue), null);
 165:              else
 166:                  throw new NotImplementedException("Objektet har felttype som ikke er implementert enda..");
 167:          }
 168:      }

Comments [0]

Ajax: AutoCompleteExtender

Eksempel på bruk av AutoCompleteExtender fra AjaxControlToolkit:

 

Husk updatepanel og scriptmanager på siden.

 

ASPX:

 

 

<div style="float: left; background-color: Wheat;" id="info" runat="server" enableviewstate="false" >

            <p style="padding: 10px;">

            Du kan bruke denne tekstboksen til å finne rådgivernummer.<br />

            Skriv inn starten på rådgivers navn (minst tre tegn) for å søke:<br />

           

            <asp:TextBox ID="TextBox1" runat="server" Width="320"></asp:TextBox>

            <cc1:AutoCompleteExtender ID="AutoCompleteExtender1" runat="server" TargetControlID="TextBox1"

                        ServiceMethod="FinnRadgivereListe" MinimumPrefixLength="3" CompletionInterval="1000"

                        EnableCaching="true" CompletionSetCount="20"

                        CompletionListCssClass="autocomplete_completionListElement"

                        CompletionListItemCssClass="autocomplete_listItem"

                        CompletionListHighlightedItemCssClass="autocomplete_highlightedListItem"

                        >

            </cc1:AutoCompleteExtender>    

           

            </p>

</div>

<cc1:RoundedCornersExtender BorderColor="Yellow" Radius="15" ID="round1" TargetControlID="info" runat="server">

            </cc1:RoundedCornersExtender>

 

 

 

ASPX.CS:

 

    [WebMethod]

    [ScriptMethod]

    public static string[] FinnRadgivereListe(string prefixText, int count)

    {

        string[] liste=null;

        try

        {

            liste=Kontroller.FinnRadgivere(Convert.ToInt32(Kontroller.HentRadgiverNr()), prefixText, count);

        }

        catch

        {

        }

        return liste;

 

    }

      

 

 

 

 

CSS:

 

.autocomplete_completionListElement

{

            visibility : hidden;

            margin : 0px!important;

            background-color : inherit;

            color : windowtext;

            border : buttonshadow;

            border-width : 1px;

            border-style : solid;

            cursor : 'default';

            overflow : auto;          

    text-align : left;

    list-style-type : none;

 

}

 .autocomplete_listItem

 {

            background-color : window;

            color : windowtext;

            padding : 1px;

 

 }

 .autocomplete_highlightedListItem

 {

            background-color: #ffff99;

            color: black;

            padding: 1px;

 

 }

 

 

Comments [0]

LINQ/Cast/Array/Take: Caste fra IENumerable til Array

For å f.eks konvertere et LINQ-resultatsett til en array:

 

CASTE til ARRAY

 

[WebMethod(Description="Metode for bruk av Ajax autocompleteExtension")]

public string[] FinnRadgivere(string prefixText)

{

            var rslt=SokRadgiver(prefixText); //returnerer f.eks en liste med radgiverentiteter

 

            var q = from radgiver in rslt

                    select new

                    {

                        radgiver.Navn

                    };

            return q.Cast<string>().ToArray();

}

 

enklere variant:

 

[WebMethod(Description="Metode for bruk av Ajax autocompleteExtension")]

        public string[] FinnRadgivere(string prefixText)

        {

 

            var rslt=SokRadgiver(prefixText);

 

            var q = from radgiver in rslt

                        select radgiver.Navn;

 

            return q.ToArray();

 

        }

 

 

annen variant som gjør tilsvarende:

 

 

   HendelseInformasjonEntitet[] q = HendelseTjeneste.HentHendelseInformasjonListe(param, out melding);

 

            var w = from h in q

                    select new HendelseInformasjonRadgiverEntitet()

                    {

                        Beskrivelse = h.Beskrivelse,

                        EksternHendelseID = h.EksternHendelseID,

                        HendelseBestiller = h.HendelseBestiller,

                        HendelseDato = h.HendelseDato,

                        HendelseEier = h.HendelseEier,

                        HendelseEierNavn = HentRådgiver(h.HendelseEier, h.HendelseEier),

                        HendelseInformasjonID = h.HendelseInformasjonID,

                        HendelsetypeID = h.HendelsetypeID,

                        Status = h.Status,

                        Viderefordeling = h.Viderefordeling

                    };

 

            return w.Cast<HendelseInformasjonRadgiverEntitet>().ToArray();

 

 

 

 

LINQ TAKE

Returner X antall poster vha Take:

 

[WebMethod(Description="Metode for bruk av Ajax autocompleteExtension")]

        public string[] FinnRadgivere(string prefixText, int count)

        {

 

            var rslt=SokRadgiver(prefixText);

 

            var q = from radgiver in rslt.Take(count)

                                       select radgiver.Navn;

 

            return q.ToArray();

 

        }

 

 

Comments [0]

Shelveset og Visual Studio/Team Foundation Server

Shelveset er en fin funksjon som lar deg lagre dine endringer under sourcecontrol, uten å sjekke de inn.

Du kan deretter jobbe videre på disse filene, elller hente siste versjon fra tfs og hente shelveset tilbake senere.

 

Du vil imidlertid fort oppdage en liten "issue" med dette.

 

Dersom shelvesettet ditt inneholder utsjekkete filer (og det vil det jo som oftest),

og du senere sjekker inn alle disse filene så vil du se noe merkelig.

 

Alle filer som var utsjekket vil ha det ikonet som viser at noen andre har filene sjekket ut:

 

Og tooltipet på disse filene sier: checked out by someone else in another place e.l.

Hvis du derimot sjekker i Source Explorer vil du se at disse filene ikke er sjekket ut.

 

Og slik vil det altså se ut for alle som jobber mot disse filene.

Det gjør det litt vanskeligere å kjapt få oversikt over utsjekkete filer.

mer detaljer evt her (som jeg har stjålet bildet over fra): http://blogs.infosupport.com/marcelv/archive/2007/12/03/Team-Foundation-Server-2008-shows-incorrect-version-control-status-in-team-explorer-.aspx

Pr des. 2008 har jeg ikke sett en fiks på dette.

 

 

Eneste løsningen er faktisk å slette selve shelvesettet når du er ferdig med det.

Det gjør du slik:

 

i VS: File - Source Control - Unshelve Pending changes

du vil da få opp en liste med dine shelveset.

Her kan velge ett eller flere og trykke Delete.

 

(se evt her: http://msdn.microsoft.com/en-us/library/ms245473(VS.80).aspx)

 

 

Hvis du henter løsningen på nytt vil du se at tingene er tilbake til "normalt".

 

 

Comments [0]

Finne hvilken kontroll som har ført til Postback av siden

 

Av og til er det nødvendig å kunne sjekke hvilken kontroll som førte til postback.

 

Det kan f.eks være en side med mange egendefinerte filtre osv, med egendefinert databinding,

hvor hvis man ventet til Eventhandleren for Button eller DropDown så ville man måtte hente data flere ganger osv.

 

 

Page_Load har jo object sender, og hvis man googler litt ser man at flere foreslår å caste sender til button.

Det virker dessverre ikke. Når en knapp har postet er det siden selv som står som sender.

Tilsvarende foreslår mange å bruke "__EventTarget".

Det fungerer fint for dropdowns osv., men igjen, for buttons og kusinene vil denne ikke virke. Da er eventtarget tom/""

 

Løsningen for Button og dens venner er (dessverre) å loope igjennom Request.Form, caste til control, og sjekke om det er en Button.

Hvis ja kan man slutte å loope, da den eneste gangen en button vil være i Request.Form-samlingen er hvis det er den som Postet siden.

 

Krøkkete men funker.

 

Her er i alle fall en util for å finne kontrollen som har postet siden:

(en kollega har laget denne, jeg har bare utvidet den med en fiks for Imagebutton)

public static class Utils
{

    /// <summary>
    /// Denne funksjonen finne hvilken kontroll som har forårsaket postback på en side.
    /// </summary>
    /// <param name="page">Siden vi vil finne postback for</param>
    /// <returns>Returnerer kontroll som har forårsaket postback</returns>
    public static Control FinnPostbackControl ( Page page )
    {
        Control control = null;

        //Kontroll som forårsaker postback ligger i _EVENTTARGET...
        string ctrlName = page.Request.Params.Get("__EVENTTARGET");
        if ( !String.IsNullOrEmpty(ctrlName) )
        {
            control = page.FindControl(ctrlName);
        }
        else
        {
            Control c; //bruker en temp controlholder slik at control==null hvis ikke funnet
            //...utenom Button, den ligger i Request.Form (ingen andre knapper en postback-knappen vil ligge her)
            foreach ( string str in page.Request.Form )
            {
                //fix for imagebutton-kontroller
                if (str.EndsWith(".x") || str.EndsWith(".y"))
                {
                    string nystr = str.Substring(0, str.Length - 2);
                    c = page.FindControl(nystr);
                    if (c is ImageButton)
                    {
                        control = c;
                        break;
                    }
                }
                else
                {
                    c = page.FindControl(str);
                    if (c is Button)
                    {
                        control = c;
                        break;
                    }
                }
            }
        }

        return control;
    }

Comments [0]

Infragistics UltraWebChart og sti til ChartImages

 

Som default vil Infragistics opprette en ny chartImages i hver mappe hvor man har en side som benytter en chart-kontroll.

F.eks
/ChartImages
/Hendelser/ChartImages

osv.

For å styre disse mot samme mappe (f.eks når man har et cluster og må opprette en delt ressurs mellom nodene) må man endre properties for kontrollen.

Nå har UltraWebChart en property som heter ChartImagesPath.

Den er det selvfølgelig ikke…

 

I stedet må du lage en seksjon kalt: DeploymentScenario:

Her ser du koden jeg bruker for å samle alt i en felles mappe i rot:

<DeploymentScenario

                            FilePath="~/ChartImages/"
                            ImageURL="../ChartImages/RapportFront_#SEQNUM(100).png" />


Som du ser er det en fleksibel løsning hvor du kan angi navngivingsregler osv.

Denne vil lage bilder kalt RapportFront_0.png  osv til RapportFront_99.png, deretter begynner telleren på nytt.

Tallet kan økes fra 100 til dine ønsker.

Du kan også bruke session_id i navngivingen, i kombinasjon med #seqnum, eller i stedet for.

Da heter variabelen #SESSION


For en chart-kontroll et nivå under roten vil det kunne se slik ut:

 

<igchart:UltraChart ID="UltraChart1" runat="server" BorderWidth="0px" Width="750px"

                        Version="8.2" BackColor="" ForeColor="Black" >

                        <DeploymentScenario

                            FilePath="~/ChartImages/"

                            ImageURL="../ChartImages/RapportFront_#SEQNUM(100).png"

                            />

                        <Tooltips Font-Bold="False" Font-Italic="False" Font-Overline="False" Font-Strikeout="False"

                            Font-Underline="False" />

………../>

 

NB. i første versjon av posten hadde jeg med variabelen #EXT som erstatning for filtypen (.png i eksempelet over.)

Da den ikke virket men ga meg filnavn som faktisk sluttet med .#EXT så har jeg fjernet denne nå.

Comments [0]

c#/Asp.Net: Objectdatasource

Strevde med å få en Objectdatasource til å virke i Design mode.

 

Trikset var: bruk properties i stedet for fields i ditt Business Object.

 

Hvis ikke får du ikke Design-time goodness :)

 

Her er kode som virker:

(metoder osv er forenklet for å illustrere konseptet uten å gjøre eksempelet for stort)

 

 

.CS (bør ligge i App_Code)

 

 

Mitt dataobjekt som altså nå har properties:

 

 

    public class RapportPeriode

    {

        public string Type {get;set;}

        public int HendelseTypeID {get;set;}

        public int Totalt {get;set;}

 

    }

 

/*********************************************************************

            denne klassen kan ikke benyttes som utgangspunkt for Objectdatasource

            den har fields som verdier i stedet for properties

    public class RapportPeriode

    {

        public string Type;

        public int HendelseTypeID;

        public int Totalt;

    }

 

*********************************************************************/

 

 

//Klasse du bruker mot Objektdatasource:

public class RapportHjelper

    {

    

        public List<RapportPeriode> GetData(int År)

        {

 

               List<RapportPeriode> liste = new List<RapportPeriode>();

 

 

                RapportPeriode rad = new RapportPeriode();

                rad.Type = "Totalt"

                rad.HendelseTypeID = 0;

                rad.Totalt = 100;

 

                liste.Add(rad);

 

                rad = new RapportPeriode();

                rad.Type = "Noe "

                rad.HendelseTypeID = 1;

                rad.Totalt = 7;

 

                liste.Add(rad);

       

                return liste;           

 

        }

 

}

 

 

 

 

.ASPX:

 

          <asp:GridView ID="GridView1" runat="server" DataSourceID="ds"

                AutoGenerateColumns="False">

                <Columns>

                    <asp:BoundField DataField="Type" HeaderText="Type" SortExpression="Type" />

                    <asp:BoundField DataField="HendelseTypeID" HeaderText="HendelseTypeID"

                        SortExpression="HendelseTypeID" Visible="false" />

                    <asp:BoundField DataField="Totalt" HeaderText="Totalt"

                        SortExpression="Totalt" />

                </Columns>

            </asp:GridView>

     

          

    <asp:ObjectDataSource

        ID="ds" runat="server"

        SelectMethod="GetData"

        typename="RapportHjelper" >

       

        <SelectParameters>

            <asp:ControlParameter ControlID="lblPeriode" DefaultValue="DateTime.Now.Year"

                Name="År" PropertyName="Text" Type="Int32" />

        </SelectParameters>

    </asp:ObjectDataSource>

 

Comments [0]

Javascript: pause/vent til bruker er ferdig med å skrive før funksjon kalles

Denne venter mens brukeren skriver, og etter en selvbestemt pause (750ms i dette tilfellet) kalles en funksjon:
(Brukes f.eks sammen med Ajax for å filtrere mens man skriver osv)


Jeg bruker denne slik på en textbox:

<input name="filterAktoernummer" type="text" id=" filterAktoernummer" onkeyup="VentOppdater(this);"/>


    <script language="javascript">

          var count = 0;

          /* kjører kun oppdatering/spørring når bruker har sluttet å skrive*/
          function VentOppdater(txtbox)
          {
             count = count+1;
             setTimeout("VentOk("+count+",'" + txtbox.id +"','" + txtbox.value + "')",750);
          }

          function VentOk(currCount,myid,verdi)
          {
             if(currCount == count)
             {
                count = 0;
                Oppdater(myid,verdi);
             }
          }


        function Oppdater(id,verdi)
        {

                /*Her kjøres det filtrering etc som du ønsker skal skje når bruker har sluttet/pauset skrivingen*/

        }

    </script>

Comments [0]

C#: Lagre objekt til cookie

 
    /// <summary>
    /// util for å serialize /deserialize objekter til cookies
    /// </summary>
    public static class CookieUtils
    {
 
        /// <summary>
        /// Henter satt cookie som object, returnerer null hvis cookie ikke finnes
        /// </summary>
        /// <param name="navn"></param>
        /// <returns></returns>
        public static T GetCookie<T>(string navn) where T : class, new()
        {
            StringReader stream;
 
            try
            {
 
                HttpCookie c = HttpContext.Current.Request.Cookies[navn];
                if (c == null || string.IsNullOrEmpty(c.Value))
                    return default(T);
 

                string[] verdier = c.Value.Split('|');
                int n = 0;
 
                T objekt = new T();
 
                Type type = objekt.GetType();
                //Type type = objekt.GetType();
                FieldInfo[] felter = type.GetFields();
                foreach (FieldInfo feltinf in felter)
                {
                    feltinf.SetValue(objekt, verdier[n++]);
                }
 
                PropertyInfo[] props = type.GetProperties();
                foreach (PropertyInfo propinf in props)
                {
                    SetProperty(propinf, verdier[n++], objekt);
                }
 
 
 
                return objekt;
            }
            catch (Exception ex)
            {
                throw new BasisException(ex);
            }
 

        }
        /// <summary>
        /// Lager cookie av gjeldende objekt som utløper om 10 timer
        /// </summary>
        /// <param name="navn"></param>
        /// <param name="objekt"></param>
        public static void SetCookie(string navn, object objekt)
        {
            SetCookie(navn, objekt, DateTime.Now.AddHours(10));
        }
 
        /// <summary>
        /// Lager cookie av gjeldende objekt
        /// </summary>
        /// <param name="navn"></param>
        /// <param name="objekt"></param>
        /// <param name="utløper"></param>
        public static void SetCookie(string navn, object objekt, DateTime utløper)
        {
 

            try
            {
 
                StringBuilder streng = new StringBuilder();
                Type type = objekt.GetType();
                FieldInfo[] felter = type.GetFields();
                foreach (FieldInfo feltinf in felter)
                {
                    if (feltinf != null)
                    {
                        object verdi = feltinf.GetValue(objekt);
                        streng.Append(verdi.ToString() + "|");
 
                    }
                }
 
                PropertyInfo[] props = type.GetProperties();
                foreach (PropertyInfo propinf in props)
                {
                    if (propinf != null)
                    {
                        object verdi = propinf.GetValue(objekt, null);
                        streng.Append(verdi.ToString() + "|");
                    }
                }
 
                HttpCookie c = new HttpCookie(navn, streng.ToString());
 
                c.Expires = utløper;
 
                if (HttpContext.Current.Request.Cookies[navn] != null)
                    //finnes fra før
                    HttpContext.Current.Response.Cookies.Set(c);
                else
                    //finnes ikke, lag ny
                    HttpContext.Current.Response.Cookies.Add(c);
 
            }
            catch (Exception ex)
            {
                throw new BasisException(ex);
            }
        }
 

        /// <summary>
        /// sletter en satt cookie
        /// (resetter verdi og setter utløpsdato tilbake i tid)
        /// </summary>
        /// <param name="navn"></param>
        public static void SlettCookie(string navn)
        {
            //tømmer verdi og setter utløpt for ett år siden
            HttpCookie c = new HttpCookie(navn, "");
            c.Expires = DateTime.Now.AddYears(-1);
 
            if (HttpContext.Current.Request.Cookies[navn] != null)
                //finnes fra før
                HttpContext.Current.Response.Cookies.Set(c);
 
        }
 

        /// <summary>
        /// Hjelpemetode for å sette en verdi via reflection etc
        /// </summary>
        /// <param name="pInfo"></param>
        /// <param name="propertyName"></param>
        /// <param name="propertyValue"></param>
        /// <param name="control"></param>
        /// <param name="objectToSetValue"></param>
        private static void SetProperty(PropertyInfo pInfo, string propertyValue, object objectToSetValue)
        {
            Type pType = pInfo.PropertyType;
 
            if (pType == typeof(string))
                pInfo.SetValue(objectToSetValue, propertyValue, null);
            else if (pType == typeof(bool))
                pInfo.SetValue(objectToSetValue, Convert.ToBoolean(propertyValue), null);
            else if (pType == typeof(int))
                pInfo.SetValue(objectToSetValue, Convert.ToInt32(propertyValue), null);
            else
                throw new NotImplementedException("Objektet har felttype som ikke er implementert enda..");
        }
    }
 
 

Comments [0]