24 Stimmen

Übergabe von int-Array als Parameter im Web-Benutzersteuerelement

Ich habe ein int-Array als Eigenschaft eines Web-Benutzersteuerelements. Ich möchte diese Eigenschaft inline setzen, wenn möglich, mit der folgenden Syntax:

Dies schlägt zur Laufzeit fehl, da es ein tatsächliches int-Array erwartet, aber stattdessen ein String übergeben wird. Ich kann myintarray zu einem String machen und es im Setter parsen, aber ich frage mich, ob es eine elegantere Lösung gibt.

2voto

Dgc Punkte 21

Sie könnten auch etwas Ähnliches tun:

namespace InternalArray
{
    /// 
    /// Element zum Setzen des Werts spezifisch
    /// 

    public class ArrayItem
    {
        public int Value { get; set; }
    }

    public class CustomUserControl : UserControl
    {

        private List Ints {get {return this.ItemsToList();}
        /// 
        /// Setzen unserer Werte explizit
        /// 
        [PersistenceMode(PersistenceMode.InnerProperty), TemplateContainer(typeof(List))]
        public List Values { get; set; }

        /// 
        /// Konvertiert unser ArrayItem in eine List 
        /// 
        /// 
        private List ItemsToList()
        {
            return (from q in this.Values
                    select q.Value).ToList();
        }
    }
}

was zu Folgendem führen wird:

1voto

mattlant Punkte 15146

Um Kinderelemente hinzuzufügen, die Ihre Liste erstellen, müssen Sie Ihre Steuerung auf eine bestimmte Weise einrichten:

[ParseChildren(true, "Actions")]
[PersistChildren(false)]
[ToolboxData("<{0}:PageActionManager runat=\"server\" >")]
[NonVisualControl]
public class PageActionManager : Control
{

Die oben genannten Aktionen sind der Name der Eigenschaft, in der sich die Kinderelemente befinden werden. Ich verwende ein ArrayList, da ich noch nichts anderes damit getestet habe.:

        private ArrayList _actions = new ArrayList();
    public ArrayList Actions
    {
        get
        {
            return _actions;
        }
    }

Wenn Ihre Steuerung initialisiert wird, wird sie die Werte der Kinderelemente haben. Sie können also eine Miniklasse erstellen, die einfach Ints enthält.

0voto

David Basarab Punkte 69965

Um das zu tun, worüber Bill mit der Liste gesprochen hat, müssen Sie einfach eine List-Eigenschaft auf Ihrem Benutzersteuerelement erstellen. Dann können Sie es implementieren, wie Bill es beschrieben hat.

0voto

user19264 Punkte 481

Sie könnten der Seite Ereignisse innerhalb der aspx wie folgt hinzufügen:

protected void Page_Load(object sender, EventArgs e)
{
    YourUserControlID.myintarray = new Int32[] { 1, 2, 3 };
}

0voto

Sie können eine Typkonverterklasse implementieren, die zwischen int-Array und String-Datentypen konvertiert. Dekorieren Sie dann Ihr int-Array-Eigenschaft mit dem TypeConverterAttribute und geben Sie die von Ihnen implementierte Klasse an. Visual Studio verwendet dann Ihren Typkonverter für Typumwandlungen an Ihrer Eigenschaft.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X