Серверный комплекс управления ASP.Net "Свойства" - PullRequest
1 голос
/ 15 апреля 2009

Я собираюсь извиниться заранее, потому что я действительно нахожусь в пределах моего понимания этого, так что, если я не объясню это хорошо .... извините ...

В любом случае я пытаюсь создать серверный элемент управления asp.net, который имеет сложные свойства, которые можно установить с помощью intellisense. В качестве примера я буду использовать автомобили, чтобы серверный элемент управления мог называться car, а когда я фактически реализую элемент управления в веб-форме, я хочу установить сложные иерархические свойства, например:

<Control:Car Color="Paint.Metalic.CandyRed" 
             Wheels="Forged.Aluminun.FiveSpoke.GunMetal" />

или

<Control:Car Color="Paint.Matte.Yellow"
             Wheels="Forged.Steel.SevenSpoke.BareMetal" />

Я попытался создать открытые свойства в серверном элементе управления, которые являются просто типами / классами, которые указывают на базовый класс, но intellisense ничего не придумала. Я могу использовать прямое перечисление, и это появится, но я не могу сделать что-то иерархическое таким образом. Я искал примеры, но не могу ничего найти. Любая помощь будет принята с благодарностью !!!!

Спасибо!

Как насчет другого примера, поскольку кажется, что взаимосвязь между предметами или их предполагаемой ценностью, хотя и совершенно не важна, кажется проблемой.

Давайте возьмем отношения между континентом / страной / государством / городом / и т. Д. .... В этом примере, если мой пользовательский серверный элемент управления называется «Местоположение», я бы хотел иметь возможность ...

<Control:Location CurrentLocation="UnitedStates.Nebraska.Lincoln" />

или

<Control:Location CurrentLocation="Europe.Italy.Napoli" />

Ответы [ 3 ]

9 голосов
/ 15 апреля 2009

Ваша проблема хуже, чем предполагают предыдущие два ответа: вы не знаете, что делаете.

Извините, что звучу так резко, но где вы когда-нибудь видели что-то вроде "Paint.Metalic.CandyRed", и что это там значило? Или "Подделанный. Алюминий. Пятый. ГунМетал"? Что вы хотите, чтобы это значило?

Сначала выясните, что вы хотите изобразить. Затем создайте класс, который может представлять его. Затем добавьте свойство этого класса в серверный элемент управления. Возможно, вам придется добавить TypeConverter или другую поддержку дизайнера, чтобы ASP.NET преобразовал предпочтительное текстовое представление в экземпляр класса. В противном случае вы сможете получить что-то вроде свойств шрифта.


Я собираюсь сделать предположение о том, что представляют собой некоторые из этих значений, и попытаюсь показать вам, как обращаться с ними в элементе управления. Впрочем, мое предположение может быть далеко.

Я буду работать с "Paint.Metalic.CandyRed". Я предполагаю, что это относится к области автомобильной настройки и что свойство Color предназначено для представления отделки, данной автомобилю в целом. В этом случае «Paint», вероятно, будет enum, относящимся к типу отделки (хотя я не знаю, какие другие виды отделки применимы к автомобилю!). Я знал, когда строил модели автомобилей, когда я был ребенком, краски могут быть металлическими, или глянцевыми, или плоскими, так что эти три были бы значениями перечисления одного перечисления. «CandyRed» будет одним из многих цветов. Это даст что-то вроде этого:

public enum FinishType
{
    Paint,
    NotPaint // _I_ don't know!
}

public enum PaintFinish
{
    Metallic,
    Gloss,
    Flat
}

public enum CarColor
{
    CandyRed,
    SilverMist,
    DesertSandMica,
    MagneticGray,
    // etc.
}


public class CarFinish
{
    public FinishType FinishType {get;set;}
    public PaintFinish PaintFinish {get;set;}
    public CarColor CarColor {get;set;}
}

public class Car : WebControl
{
    public CarFinish Color {get;set;}
}

Это позволило бы что-то вроде этого:

<Control:Car Color-FinishType="Paint"
             Color-PaintFinish="Metallic"
             Color-CarColor="CandyRed" .../>

или это:

<Control:Car ...>
    <Color FinishType="Paint" PaintFinish="Metallic" CarColor="CandyRed"/>
</Control:Car>
0 голосов
/ 15 апреля 2009

Как писал Митчел Селлерс, они должны быть Enum или Constants / Statics.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Paint
{
    public class Metallic
    {
        public static Color CandyRed
        {
            get { return Color.Red; }
        }

        public static Color CandyGreen
        {
            get { return Color.Green; }
        }
    }

    public class Matte
    {
        public static Color Red
        {
            get { return Color.Red; }
        }

        public static Color Green
        {
            get { return Color.Green; }
        }
    }
}
0 голосов
/ 15 апреля 2009

Эти элементы должны быть перечислениями, поскольку это единственный способ, которым они поддерживаются, по крайней мере, во всем, что я видел. теперь вы можете выполнить желаемое с помощью нескольких перечислений.

namespace Paint
{
    public enum Metalic
    {
        CandyRed
    }

    public enum Matte
    {
        Yellow
    }
}

Конечно, не идеально, но легко документировать и понимать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...