V Vinnaren Medlem sedan sep. 2005 833 inlägg Frågan 7 juni 2008 17:08 #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
V Vinnaren Medlem sedan sep. 2005 833 inlägg 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
V Vinnaren Medlem sedan sep. 2005 833 inlägg löste det med en ny public funktion som får anropas, som sedan kör igenom if satsen
G Gladh Medlem sedan maj 2001 2 812 inlägg 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
V Vinnaren Medlem sedan sep. 2005 833 inlägg tack för tipset Gladh. Funkar ju likabra det (y)
hopparn Medlem sedan nov. 2001 1 551 inlägg OT: Jag blir alldeles varm i hjärtat när gar ser sån kodförenkling Gladh :)