WebControl et erreur dans l'éditeur en mode Design
Bonjour,
J'ai une erreur gênante au niveau du mode design (mais au Runtime ça fonctionne très bien) :
Citation:
Error Rendering Control - Unnamed1
An unhandled exception has occured.
Object reference not set to an instance of an object
Comme je le dis, au niveau du code aucune erreur, et au lancement du site ASP.Net idem : ça s'affiche parfaitement. C'est juste au niveau de l'éditeur en mode design que ça bug, apparemment il ne sait pas quoi afficher car l'instance est nulle, mais quelle instance et quoi faire? J'ai cherché des erreurs semblables mais je me trouve rarement dans le cas d'un WebControl totalement généré par programmation.
Voici mon code en entier, très simple : j'hérite de WebControl, j'ai deux propriétés, Code étant la plus importante car elle est requise pour l'appel à GB.Text(Code) qui va chercher dans la mémoire la traduction associée au code passé en paramètre.
Text.cs
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
| using System;
using System.ComponentModel;
using System.Security;
using System.Security.Permissions;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace Palarc.Controls
{
[
AspNetHostingPermission(SecurityAction.Demand,
Level = AspNetHostingPermissionLevel.Minimal),
AspNetHostingPermission(SecurityAction.InheritanceDemand,
Level = AspNetHostingPermissionLevel.Minimal),
DefaultProperty("Code"),
ToolboxData("<{0}:Text runat=\"server\"> </{0}:Text>")
]
public class Text : WebControl
{
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("Code of the text to translate."),
Localizable(true),
PersistenceMode(PersistenceMode.InnerDefaultProperty)
]
public virtual int Code
{
get
{
int? i = (int?)ViewState["Code"];
return (i == null) ? -1 : (int)i;
}
set
{
ViewState["Code"] = value;
}
}
[
Bindable(true),
Category("Appearance"),
DefaultValue(""),
Description("The text to display.")
]
public virtual string Value
{
get
{
string s = (string)ViewState["Value"];
return (s == null) ? GB.Text(Code) : s;
}
set
{
ViewState["Value"] = value;
}
}
protected override void Render(HtmlTextWriter output)
{
if (Value == null || Value == String.Empty)
{
Value = "Not translated";
}
output.WriteEncodedText(Value);
}
}
} |
Au niveau de la page ASPX utilisant le contrôle :
Code:
1 2 3 4 5
| <p>
<palarc:Text Code="149" runat="server" />
<asp:TextBox ID="Comments" runat="server" TextMode="MultiLine" Rows="4" cols="200"></asp:TextBox>
</p>
<p><palarc:Button ID="BtValid" Code="666" runat="server"></palarc:Button></p> |
À noter que je n'ai pas ce problème quand j'hérite d'un contrôle ASP.Net "standard" comme un Button/LinkButton/Label/etc...
Le designer n'a pas l'air de savoir quoi afficher, c'est un bug gênant pour le développement mais qui n'a pas d'impact au moment du lancement sur ASP.Net.
Si vous avez une idée n'hésitez pas! Si je trouve la solution je la posterai ici, ça ne doit pas être bien dur mais je cherche depuis quelques heures.