webForumDet fria alternativet

problem med egenskaper på kontroll

.NET

6 svar · 578 visningar · startad av Vinnaren

Medlem sedan sep. 2005833 inlägg
Frågan#1

Har gjort en kontroll, men när jag ska sätta egenskaperna dynamiskt fungerar det inte som det ska.

Har i kontrollen:

    public string Header { get { return lblMsg.Text; } set { lblMsg.Text = value; } }
    public string Description { get { return lblDescription.Text; } set { lblDescription.Text = value; } }
    public bool Error { get { return error; } set { error = value; } }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (error == true)
        {
            imgError.Visible = true;
            imgOK.Visible = false;
            pMsg.CssClass = "statuserror";
        }
        else if(error == false)
        {
            imgError.Visible = false;
            imgOK.Visible = true;
            pMsg.CssClass = "statusok";
        }
    }

Samt länkar in den:

    <message:status ID="message" runat="server" />

Sen i code behind:

            message.Header = "Ett fel inträffade när sidan skulle visas.";
            message.Error = true;
            message.Description = ex.Message;

Men oavsett vad som står message.Error så blir den alltid false, Header & Description texten kommer fram.

Det är när det blir en postback som det inte fungerar som det ska, men i onload fungerar det.

Hur löser man detta?? Tacksam för all hjälp :stud

Medlem sedan dec. 20014 239 inlägg
#2

Sök på page.postback

Medlem sedan sep. 2005833 inlägg
#3

hmm, har provat med:

    protected void Page_PostBack(object sender, EventArgs e) 
    {
        if (error == true)
        {
            imgError.Visible = true;
            imgOK.Visible = false;
            pMsg.CssClass = "statuserror";
        }
        else if (error == false)
        {
            imgError.Visible = false;
            imgOK.Visible = true;
            pMsg.CssClass = "statusok";
        }
    }

Men den körs aldrig i kontrollen. Utan när det blir en postback så laddas sidan om och då skickas false in i kontrollen, o när den kommer ner till catchen och ska sätta Error = true; så är den redan satt till false och if-satsen har redan körts.

Jag vill att det ska fungera både när sidan laddas och när det blir en postback.

Hur löser jag detta? :stud

Medlem sedan sep. 2005833 inlägg
#4

löste det med en ny public funktion som får anropas, som sedan kör igenom if satsen

Medlem sedan maj 20012 812 inlägg
#5

Det har inget med ditt problem att göra, men här är en kortare variant att skriva din kod på.

Istället för

        if (error == true)
        {
            imgError.Visible = true;
            imgOK.Visible = false;
            pMsg.CssClass = "statuserror";
        }
        else if(error == false)
        {
            imgError.Visible = false;
            imgOK.Visible = true;
            pMsg.CssClass = "statusok";
        }

så kan du skriva

            imgError.Visible = error;
            imgOK.Visible = !error;
            pMsg.CssClass = (error ? "statusok" : "statuserror");

Mindre kod ger färre fel och lättare överblick, dessutom om du man har mycket dublikativ kod, så är det lätt att man glömer ändra på alla ställen om man råkar ändra i sin kod, någonstans.

Målet är att aldrig ha "samma" kod på 2 ställen i sitt program, så fall är det bättre att bryta ut det i en egen metod och anropa den metoden från 2 olika ställen i sin kod. Blir mycket enklare att underhålla...

- M

Medlem sedan sep. 2005833 inlägg
#6

tack för tipset Gladh. Funkar ju likabra det (y)

Medlem sedan nov. 20011 551 inlägg
#7

OT: Jag blir alldeles varm i hjärtat när gar ser sån kodförenkling Gladh :)

249 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)