Avatar billede mikkel251 Seniormester
29. juli 2016 - 11:55 Der er 2 kommentarer

åbne panel med et a tag

hej eksperter jeg ved ikke lige hvordan den skal formuleres men jeg har en profil side og på selve siden har jeg en menu med 3 links i hvor jeg kan redigere min profil,
et link hvor jeg kan ændre brugernavn og email og et link hvor jeg kan ændre adgangskode og et link hvor jeg kan skrive en beskrivelse af mig selv, og for hvert link der åbnes et panel med det textboxe der skal bruges, men når et link er aktiv skal man kunne se det og der har jeg prøvet at tilføje css class='active' til den men når det er et panel man gør det med er det hvordan gør man så for jeg kan ikke få det til at virke, jeg har prøvet at hente navs fra en database og så virker det men så åbner mine paneler ikke og hvis jeg gør det uden at bruge databasen til min navs så virker panelerne men ikke css classen, hvad skal jeg gøre for at det virker på den ene eller anden måde??
tak fordi i gider kikke på det :D

mine servercontroller og html opmærkning
<%@ Page Title="" Language="C#" MasterPageFile="~/admin/MasterPage.master" AutoEventWireup="true" CodeFile="profil.aspx.cs" Inherits="admin_profil" %>

<%-- namespace til ckeeditor serverkontrollen --%>
<%@ Register Assembly="CKEditor.NET" Namespace="CKEditor.NET" TagPrefix="CKEditor" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="Server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="Server">
    <div class="container-fluid">
        <h3 class="page-header">
            <asp:Literal
                ID="litProfil"
                runat="server" />
        </h3>
        <%-- Panel med brugernavn og email --%>
        <asp:Panel ID="pnlBrugerOplysninger" DefaultButton="btnGemOplysninger" runat="server">
            <div class="row">
                <div class="col-md-2">
                    <asp:Panel ID="pnlImg" CssClass="pnl-img" DefaultButton="btnImg" runat="server">
                        <asp:Literal
                            ID="litHentProfilImg"
                            runat="server" />
                        <br />
                        <asp:Label
                            ID="lbRoterImg"
                            runat="server"
                            Text="Roter billede" />
                        <br />
                        <%-- mod uret --%>
                        <asp:ImageButton
                            ID="ibRoterImgModUret"
                            ImageUrl="../img/roter-img.png"
                            Width="25"
                            ToolTip="Roter billede mod uret"
                            ValidationGroup="roterImg"
                            OnClick="ibRoterImgModUret_Click"
                            runat="server" />
                        <%-- med uret --%>

                        <asp:ImageButton
                            ID="ibRoterImgMedUret"
                            ImageUrl="../img/roter-img-med-uret.png"
                            Width="25"
                            ToolTip="Roter billede med uret"
                            ValidationGroup="roterImg"
                            OnClick="ibRoterImgMedUret_Click"
                            runat="server" />
                        <br />
                        <br />

                        <asp:FileUpload
                            ID="fuImg"
                            AllowMultiple="true"
                            ClientIDMode="Static"
                            runat="server" />
                        <br />
                        <%-- thumbnail billede af det som skal oploades --%>
                        <output></output>

                        <br />
                        <asp:Button
                            ID="btnImg"
                            ValidationGroup="img"
                            OnClick="btnImg_Click"
                            CssClass="btn btn-default"
                            runat="server"
                            Text="Gem" />
                        <br />
                        <asp:Literal
                            ID="litImgMsg"
                            runat="server" />
                    </asp:Panel>

                    <%-- Roter billede på plads --%>
                    <div class="=btn-margin-bottom-20">
                        <%-- literal til roter billede --%>
                        <asp:Literal
                            ID="litRoterImg"
                            runat="server" />
                    </div>
                </div>






                <div class="col-sm-8">
                    <%-- Options link på profil siden --%>
                    <div class="col-sm-12">
                        <ul class="nav nav-tabs">

                            <asp:Literal ID="litMenu" runat="server"/>
                            <li role="presentation" runat="server" >
                              <%--  <a href="profil.aspx" onclick="pnlBrugernavnOgEmail.visible=true" runat="server" id="test">test</a>--%>
                              <asp:LinkButton ID="lbPersonligOplysninger"  class="active" OnClick="lbPersonligOplysninger_Click" runat="server">Ret dit navn og Email</asp:LinkButton>
                            </li>
                            <li role="presentation">
                                <asp:LinkButton ID="lbAdgangskode" OnClick="lbAdgangskode_Click" runat="server">Skift adgangskode</asp:LinkButton>
                            </li>
                            <li role="presentation">
                                <asp:LinkButton id="Beskeder"  OnClick="Beskeder_Click" runat="server">Om mig</asp:LinkButton>
                            </li>
                        </ul>
                    </div>
                    <%-- option link slut --%>









                    <%-- panelet bruger oplysninger start --%>
                    <asp:Panel ID="pnlBrugernavnOgEmail" runat="server">
                        <div class="col-sm-5">
                            <h4 class="page-header">Bruger oplysninger</h4>
                            <%-- Rediger bruger --%>
                            <asp:Label
                                ID="lblNavn"
                                AssociatedControlID="txtNavn"
                                runat="server"
                                Text="Brugernavn" />
                            <br />
                            <asp:TextBox
                                ID="txtNavn"
                                ValidationGroup="Oplysninger"
                                CssClass="form-control"
                                runat="server" />
                            <asp:RequiredFieldValidator
                                ID="rfvNavn"
                                ControlToValidate="txtNavn"
                                ValidationGroup="Oplysninger"
                                Display="Dynamic"
                                CssClass="error"
                                runat="server"
                                ErrorMessage="Du mangler at udfylde feltet" />
                            <br />
                            <asp:Label
                                ID="lblEmail"
                                AssociatedControlID="txtemail"
                                runat="server"
                                Text="E-mail" />
                            <br />
                            <asp:TextBox
                                ID="txtemail"
                                ValidationGroup="Oplysninger"
                                CssClass="form-control"
                                runat="server" />
                            <asp:RequiredFieldValidator
                                ID="rfvEmail"
                                ControlToValidate="txtemail"
                                ValidationGroup="Oplysninger"
                                Display="Dynamic"
                                CssClass="error"
                                runat="server"
                                ErrorMessage="Du mangler at udfylde feltet" />

                            <br />
                            <asp:Button
                                ID="btnGemOplysninger"
                                OnClick="btnGemOplysninger_Click"
                                ValidationGroup="Oplysninger"
                                CssClass="btn btn-default"
                                runat="server"
                                Text="Gem" />
                            <br />
                            <asp:Literal
                                ID="litBesked"
                                runat="server" />
                        </div>
                    </asp:Panel>
                    <%-- panelet bruger oplysninger slut --%>

                    <%-- panelet adgangskode start --%>
                    <asp:Panel ID="pnlSkiftKode" DefaultButton="btnGem" runat="server">
                        <div class="col-sm-5">
                            <h4 class="page-header">Skift adgangskode</h4>
                            <%-- Gammel kode --%>
                            <asp:Label
                                ID="LlblGammelKode"
                                AssociatedControlID="txtGammelKode"
                                runat="server"
                                Text="Indtast din gamle adgangskode" />
                            <br />
                            <asp:TextBox
                                ID="txtGammelKode"
                                ValidationGroup="gem-ny-kode"
                                CssClass="form-control"
                                runat="server" />
                            <asp:RequiredFieldValidator
                                ID="rfvGammelKode"
                                ControlToValidate="txtGammelKode"
                                ValidationGroup="gem-ny-kode"
                                Display="Dynamic"
                                CssClass="error"
                                runat="server"
                                ErrorMessage="Du mangler at udfylde feltet" />
                            <br />
                            <asp:Literal
                                ID="litGammelKode"
                                runat="server" />
                            <br />
                            <%-- Indtast din nye adgangskode --%>
                            <asp:Label
                                ID="lblKode"
                                AssociatedControlID="txtKode"
                                runat="server"
                                Text="Intast din nye adgangskode" />
                            <br />
                            <asp:TextBox
                                ID="txtKode"
                                ValidationGroup="gem-ny-kode"
                                CssClass="form-control"
                                runat="server" />
                            <asp:RequiredFieldValidator
                                ID="rfvKode"
                                ControlToValidate="txtKode"
                                ValidationGroup="gem-ny-kode"
                                Display="Dynamic"
                                CssClass="error"
                                runat="server"
                                ErrorMessage="Du mangler at udfylde feltet" />
                            <br />
                            <asp:Label
                                ID="lblGentagKode"
                                AssociatedControlID="txtGentagKode"
                                runat="server"
                                Text="Gentag din nye adgangskode" />
                            <br />
                            <asp:TextBox
                                ID="txtGentagKode"
                                ValidationGroup="gem-ny-kode"
                                CssClass="form-control"
                                runat="server" />
                            <asp:RequiredFieldValidator
                                ID="rfvGentagKode"
                                ControlToValidate="txtGentagKode"
                                ValidationGroup="gem-ny-kode"
                                Display="Dynamic"
                                CssClass="error"
                                runat="server"
                                ErrorMessage="Du mangler at udfylde feltet" />
                            <asp:CompareValidator
                                ID="cvKoder"
                                CssClass="error"
                                Display="Dynamic"
                                ValidationGroup="gem-ny-kode"
                                ControlToCompare="txtKode"
                                ControlToValidate="txtGentagKode"
                                runat="server"
                                ErrorMessage="Koden er ikke ens" />
                            <br />
                            <asp:Button
                                ID="btnGem"
                                CssClass="btn btn-default"
                                ValidationGroup="gem-ny-kode"
                                OnClick="btnGem_Click"
                                runat="server"
                                Text="Gem" />
                            <br />
                            <asp:Literal
                                ID="litRedigerProfil"
                                runat="server" />
                        </div>
                    </asp:Panel>
                    <%-- panelet adgangskode slut --%>


                    <%-- panelet beskrivelse start --%>
                    <asp:Panel ID="pnlBeskrivelse" runat="server">
                        <div class="col-sm-12">
                            <h4 class="page-header">Beskrivelse</h4>
                            <CKEditor:CKEditorControl
                                ID="CKEBeskrivelse"
                                BasePath="/ckeditor/"
                                FilebrowserBrowseUrl="../Filemanager-0.8/index.html"
                                ValidationGroup="bokse"
                                runat="server">
                            </CKEditor:CKEditorControl>
                            <br />
                            <asp:Button ID="btnGemOmMig" OnClick="btnGemOmMig_Click" CssClass="btn btn-danger" runat="server" Text="Gem" />
                        </div>
                    </asp:Panel>
                    <%-- panelet beskrivelse slut --%>
                </div>
            </div>
        </asp:Panel>

    </div>
</asp:Content>


Min codebehind:
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class admin_profil : System.Web.UI.Page
{
    brugereFac objProfil = new brugereFac();
    imgFac objImg = new imgFac();
    billedeRotationFac objRoterImg = new billedeRotationFac();
    beskaerimgFac objBillede = new beskaerimgFac();
    profilnavFac objProfilnav = new profilnavFac();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {

            //skjul alle paneler fra start
            pnlBrugernavnOgEmail.Visible = true;
            pnlSkiftKode.Visible = false;
            pnlBeskrivelse.Visible = false;



           
            //Her tilføjes der CSS class til li tagsene
            //Ram det id som li tag har
            string vistSide = Path.GetFileName(Request.PhysicalPath);

            if (vistSide == "Default.aspx")
            {
                lbPersonligOplysninger.Attributes.Add("class", "active");
            }

            //MENU
            DataTable dt_menu = objProfilnav.HentNav();
            foreach (DataRow dr_menu in dt_menu.Rows)
            {
                string classNavn = "";
                //hvis der er noget i querystringen så set class active på
                if (!string.IsNullOrEmpty(Request.QueryString["sideID"]))
                {
                    if (Convert.ToInt32(dr_menu["fldId"].ToString()) == Convert.ToInt32(Request.QueryString["sideID"]))
                    {
                        classNavn = "active";
                    }
                }
                //ClassNavn bliver sat på hvis menuen er aktiv
                litMenu.Text += "<li class=" + classNavn + " role='presentation'>";
                litMenu.Text += "<a href='?sideID=" + dr_menu["fldId"] + "'>" + dr_menu["fldNavn"] + "</a>";
                litMenu.Text += "</li>";
            }



            if (Session["brugernavn"] != null)
            {
                //Så skal brugeren have en velkomst besked...
                litProfil.Text = "Velkommen " + Session["brugernavn"].ToString() + " Her kan du rediger din profil";

                objProfil._brugernavn = Session["brugernavn"].ToString();
                DataRow drProfil = objProfil.HentBruger();

                //Hent profil billede og vis det på skærmen.
                //brugerens id skal med til proberty
                Session["id"] = drProfil["fldId"].ToString();
                txtNavn.Text = drProfil["fldBrugernavn"].ToString();
                txtemail.Text = drProfil["fldEmail"].ToString();



                //hent profil billede
                objImg._id = Convert.ToInt32(drProfil["fldId"]);
                DataTable dt_hentProfilImg = objImg.HentProfilImg();
                foreach (DataRow dr_Profilimg in dt_hentProfilImg.Rows)
                {
                    if (!string.IsNullOrEmpty(drProfil["fldImg"].ToString()))
                    {
                        litHentProfilImg.Text += "<img src='/img/profil/" + dr_Profilimg["fldImg"].ToString() + "' class='img-responsive billede-ramme' />";
                    }
                    else
                    {
                        litHentProfilImg.Text += "<img src='/img/profil/default-img/ingen-profil-billede.png' class='img-responsive' />";
                        //fjern rotations knapperne når et default billede vises
                        lbRoterImg.Visible = false;
                        ibRoterImgMedUret.Visible = false;
                        ibRoterImgModUret.Visible = false;

                    }
                }
            }


        }
    }
    /// <summary>
    /// Gem kode
    /// </summary>
    /// <param name="sender">Gem den nye adgangskode</param>
    /// <param name="e"></param>
    protected void btnGem_Click(object sender, EventArgs e)
    {

        //tjekker om koden passer inden jeg laver den nye kode
        bool tjekLogin = objProfil.login(Session["brugernavn"].ToString(), txtGammelKode.Text);
        if (tjekLogin)
        {
            //Hvis koden passer med den i databasen så opret en ny adgangskode
            krypteringFac objKryptering = new krypteringFac();

            //opret en variabel til salt og hash krypteringen.
            string salt = objKryptering.GetRandomSalt();
            string HashedPassword = objKryptering.HashKode(txtKode.Text, salt);

            //Gem så krypteringen af koden både salt og selve adgangskoden som bliver hashet
            objProfil._id = Convert.ToInt32(Session["id"].ToString());
            objProfil.OpretNyKode(HashedPassword, salt);
            Response.AddHeader("REFRESH", "3;URL=" + Request.RawUrl);
        }
        else
        {
            //hvis koden ikke passer med den i databasen så opret ikke en kode
            litGammelKode.Text = "<p class='error'>Koden passer ikke</p>";
        }


    }

    // Gem oplysninger om brugeren
    protected void btnGemOplysninger_Click(object sender, EventArgs e)
    {
        //Tjek om der er fyldt noget i tekst felterne
        if (!string.IsNullOrEmpty(txtNavn.Text) || !string.IsNullOrEmpty(txtemail.Text))
        {
            litBesked.Text = "";

            objProfil._brugernavn = txtNavn.Text;
            objProfil._email = txtemail.Text;
            Session["brugernavn"] = txtNavn.Text;
            //lav en session til ["fldId"] - tilføj den til proberty _id.
            objProfil._id = Convert.ToInt32(Session["id"].ToString());
            objProfil.OpdaterBrugernavnOgEmail();

            Response.Redirect(Request.RawUrl);
        }
        else
        {
            litBesked.Text += "<p class='error'>Du skal udfylde alle felterne</p>";
        }

    }

    protected void btnImg_Click(object sender, EventArgs e)
    {
        //BILLEDE OPLOAD
        string guid = Guid.NewGuid().ToString();

        //brugerens id skal med til proberty
        objImg._id = Convert.ToInt32(Session["id"]);
        DataTable Dt_img = objImg.HentProfilImg();

        //4) Put nuværende imagenavn i en variabel - så det efterfølgene kan overskrives med noget nyt - hvis admin har puttet nyt image i imageuploader...
        string _billedenavn = Dt_img.Rows[0]["fldImg"].ToString();//Det nuværende imagenavn i databasen...


        if (fuImg.HasFile)
        {
            string extension = System.IO.Path.GetExtension(fuImg.FileName.ToLower());

            if (extension == ".jpg" || extension == ".png" || extension == ".JPG" || extension == ".jpeg" || extension == ".svg" || extension == ".JPEG")
            {
                if (File.Exists(Server.MapPath(@"~\\/img/profil/" + Dt_img.Rows[0]["fldImg"])))
                {
                    //Den her sletter billedet fra mappen på serveren
                    File.Delete(Server.MapPath(@"~\\/img/profil/" + Dt_img.Rows[0]["fldImg"]));
                }

                //3)Her laver jeg det nye fil navn og gemmer det i en variabel
                string billedenavn = guid + fuImg.FileName;



                //4)Her gemmer/uploader jeg filen med nyt navn i IMG mappen...
                //fuImg.SaveAs(Request.PhysicalApplicationPath + @"/img/profil/" + billedenavn);

                //skaler billedet
                string tempFilSti = Server.MapPath("/img/temp/" + billedenavn);
                string NyFilSti = Server.MapPath("/img/profil/" + billedenavn);

                //gem billedet
                fuImg.SaveAs(tempFilSti);

                objBillede.billedeResize(tempFilSti, NyFilSti, 1024, 768);
                File.Delete(tempFilSti);


                //5)gem nu hele postyret i databasen - dvs bla det nye billede navn...
                objImg._img = billedenavn;
                objImg._id = Convert.ToInt32(Session["id"].ToString());
                objImg.opdaterImg();

                //6)Og så kan vi trygt reloade siden
                Response.Redirect("profil.aspx");
            }
            else
            {
                //her er hvad den vil sige hvis filen ikke indeholde et billede format
                litImgMsg.Text = "<p class='error'>Forkert filformat</p>";
            }
        }
        else
        {
            //en fejl hvis brugeren ikke har valg nogen fil til opload
            litImgMsg.Text = "<br /><span class='error'>Vælg venligst en fil</span>";
        }



    }

    //Roter billede med uret
    protected void ibRoterImgMedUret_Click(object sender, ImageClickEventArgs e)
    {
        //hent profil billede
        objProfil._brugernavn = Session["brugernavn"].ToString();
        DataRow drProfil = objProfil.HentBruger();
        if (!string.IsNullOrEmpty(drProfil["fldImg"].ToString()))
        {
            //Hent profil billede der skal roteres.
            //brugerens id skal med til proberty.
            Session["id"] = drProfil["fldId"].ToString();
            objRoterImg.billedeRotationMedUret(Server.MapPath("/img/profil/" + drProfil["fldImg"] + ""));


            //Udskriv billedet igen efter rotationen
            litRoterImg.Text = "<img src='/img/profil/" + drProfil["fldImg"] + "?" + DateTime.Now.ToString("hhmmssfff") + "/>";
            Response.Redirect("profil.aspx");
        }
        else
        {
            //Hent profil billede der skal roteres. hvis profilbilede felt er tomt
            //brugerens id skal med til proberty.
            Session["id"] = drProfil["fldId"].ToString();
            objRoterImg.billedeRotationMedUret(Server.MapPath("/img src='/img/profil/default-img/ingen-profil-billede.png'"));

            //Udskriv billedet igen efter rotationen
            litRoterImg.Text = "<img src='/img/profil/default-img/ingen-profil-billede.png'/>";
            Response.Redirect("profil.aspx");
        }

    }

    //Roter billede imod uret
    protected void ibRoterImgModUret_Click(object sender, ImageClickEventArgs e)
    {
        //hent profil billede
        objProfil._brugernavn = Session["brugernavn"].ToString();
        DataRow drProfil = objProfil.HentBruger();
        if (!string.IsNullOrEmpty(drProfil["fldImg"].ToString()))
        {
            //Hent profil billede der skal roteres.
            //brugerens id skal med til proberty.
            Session["id"] = drProfil["fldId"].ToString();
            objRoterImg.billedeRotationModUret(Server.MapPath("/img/profil/" + drProfil["fldImg"] + ""));

            //Udskriv billedet igen efter rotationen
            litRoterImg.Text = "<img src='/img/profil/" + drProfil["fldImg"] + "?" + DateTime.Now.ToString("hhmmssfff") + "'/>";
            Response.Redirect("profil.aspx");
        }
        else
        {
            //Hent profil billede der skal roteres. hvis profilbilede felt er tomt
            //brugerens id skal med til proberty.
            Session["id"] = drProfil["fldId"].ToString();
            objRoterImg.billedeRotationModUret(Server.MapPath("/img/profil/default-img/ingen-profil-billede.png' class='img-responsive'"));

            //Udskriv billedet igen efter rotationen
            litRoterImg.Text = "<img src='/img/profil/default/ingen-profil-billede.png' class='img-responsive'/>";
            Response.Redirect("profil.aspx");
        }
    }
    protected void lbPersonligOplysninger_Click(object sender, EventArgs e)
    {

        pnlBrugernavnOgEmail.Visible = true;
        pnlSkiftKode.Visible = false;
        pnlBeskrivelse.Visible = false;
    }
    protected void lbAdgangskode_Click(object sender, EventArgs e)
    {
        pnlBrugernavnOgEmail.Visible = false;
        pnlBeskrivelse.Visible = false;
        pnlSkiftKode.Visible = true;

    }
    protected void Beskeder_Click(object sender, EventArgs e)
    {
        pnlBrugernavnOgEmail.Visible = false;
        pnlBeskrivelse.Visible = true;
        pnlSkiftKode.Visible = false;
    }

    protected void btnGemOmMig_Click(object sender, EventArgs e)
    {

    }
}
Avatar billede arne_v Ekspert
30. juli 2016 - 22:44 #1
Det er rigtigt meget kode at skulle overskue.

:-(

Her er et simpelt eksempel som maaske kan inspirere:


<script language="C#" runat="server">
void Page_Load(Object sender, EventArgs e)
{
    pa.Visible = false;
    pb.Visible = false;
    pc.Visible = false;
}
void ShowA_Click(object sender, EventArgs e)
{
    pa.Visible = true;
    pb.Visible = false;
    pc.Visible = false;
}
void ShowB_Click(object sender, EventArgs e)
{
    pa.Visible = false;
    pb.Visible = true;
    pc.Visible = false;
}
void ShowC_Click(object sender, EventArgs e)
{
    pa.Visible = false;
    pb.Visible = false;
    pc.Visible = true;
}
void SubmitA_Click(object sender, EventArgs e)
{
    status.Text = "A now = " + ainfo.Text;
}
void SubmitB_Click(object sender, EventArgs e)
{
    status.Text = "B now = " + binfo.Text;
}
void SubmitC_Click(object sender, EventArgs e)
{
    status.Text = "C now = " + cinfo.Text;
}
</script>
<form runat="server">
<asp:panel id="pa" runat="server">
A:
<br>
<label for="ainfo">A info:</label>
<asp:textbox id="ainfo" runat="server"/>
<asp:button id="submita" text="Submit" onclick="SubmitA_Click" runat="server"/>
</asp:panel>
<asp:panel id="pb" runat="server">
B:
<br>
<label for="binfo">B info:</label>
<asp:textbox id="binfo" runat="server"/>
<asp:button id="submitb" text="Submit" onclick="SubmitB_Click" runat="server"/>
</asp:panel>
<asp:panel id="pc" runat="server">
C:
<br>
<label for="cinfo">A info:</label>
<asp:textbox id="cinfo" runat="server"/>
<asp:button id="submitc" text="Submit" onclick="SubmitC_Click" runat="server"/>
</asp:panel>
<br>
Status: <asp:label id="status" runat="server"/>
<br>
<asp:Button id="showa" text="Show A" OnClick="ShowA_Click" runat="server"/>
<asp:Button id="showb" text="Show B" OnClick="ShowB_Click" runat="server"/>
<asp:Button id="showc" text="Show C" OnClick="ShowC_Click" runat="server"/>
</form>
Avatar billede mikkel251 Seniormester
14. august 2016 - 12:46 #2
Det kan jeg godt se jeg vil prøve om jeg ikke kan korte det lidt ned næste gang :D
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

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