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; } }