Exposer une propriété complexe dans un contrôle utilisateur ASP.NET

Je souhaite exposer une propriété complexe d’un contrôle utilisateur ASP.NET personnalisé, de sorte qu’elle puisse être définie à partir de la balise de contrôle de la page aspx .

Quelque chose comme ça:

public class TestData { public int X; public int Y; } public partial class TestControl : System.Web.UI.UserControl { public TestData TestProperty { get { return ViewState["TestProperty"] as TestData; } set { ViewState["TestProperty"] = value; } } } 

Et puis dans le fichier .aspx d’une page qui contient le contrôle, j’aimerais avoir quelque chose comme:

 

Désolé de répondre à ma propre question, mais j’ai découvert deux façons de le faire et j’ai pensé qu’elles pourraient également être utiles à quelqu’un d’autre 🙂

Pour sérialiser l’object dans un atsortingbut du contrôle, vous devez définir un TypeConverter approprié et appliquer un TypeConverterAtsortingbute au type de propriété. Voici un exemple: Comment: implémenter un convertisseur de type .

Encore plus facilement, vous pouvez conserver l’atsortingbut dans le contenu du contrôle de la manière suivante:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="wbctrlstst._Default" %> <%@ Register TagPrefix="x" TagName="TestControl" Src="~/TestControl.ascx" %>   

La seule exigence, pour ce que j’ai pu voir, est que le type doit avoir un constructeur par défaut. Vous pouvez appliquer PersistenceModeAtsortingbute à la propriété pour indiquer que celle-ci doit être conservée dans le contenu des contrôles, mais il semble que ce soit le comportement par défaut et que cela n’est pas ssortingctement nécessaire.

 [PersistenceMode(PersistenceMode.InnerProperty)] public TestData TestProperty { get { return ViewState["TestProperty"] as TestData; } set { ViewState["TestProperty"] = value; } }