ASP.Net服务器控制复杂的“属性”

时间:2009-04-14 22:24:22

标签: asp.net servercontrols

我要提前进行aplogize因为我真的处于对此的理解极限,所以如果我不解释这个......很抱歉......

无论如何,我正在尝试创建一个具有复杂属性的asp.net服务器控件,可以使用intellisense设置。因此,作为一个例子,我将使用汽车,因此服务器控件可能被称为汽车,当我实际在webform上实现控件时,我想设置复杂的分层属性,例如:

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

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

我尝试在服务器控件中创建公共属性,这些属性只是指向基类的类型/类,但智能感知没有提供任何东西。我可以使用一个直接的枚举,这将显示,但我不能做任何分层的方式。我一直在寻找例子,但我似乎找不到任何东西。任何帮助将不胜感激!!!!

谢谢!

一个不同的例子怎么样,看起来项目之间的关系或它们的预期价值虽然完全不重要,但似乎是一个问题。

让我们看看大陆/国家/州/城市/等之间的关系....通过这个例子,如果我的自定义服务器控件被称为“位置”,那么我希望能够......

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

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

3 个答案:

答案 0 :(得分:9)

你的问题比前两个答案更糟糕:你不知道你在做什么。

很抱歉听起来如此刺耳,但是你在哪里看到像“Paint.Metalic.CandyRed”这样的东西,它在那里意味着什么?还是“Forged.Aluminun.FiveSpoke.GunMetal”?你甚至想要那是什么意思?

首先,找出你想要表达的内容。然后,创建一个可以表示它的类。然后,将该类的属性添加到服务器控件。您可能必须添加TypeConverter或其他设计器支持,以便ASP.NET将您首选的文本表示转换为类的实例。否则,您将能够获得类似Font的属性。


我将猜测这些值中的一些代表什么,并尝试向您展示如何在控件中处理它们。不过,我的猜测可能很遥远。

我将使用“Paint.Metalic.CandyRed”。我认为这适用于汽车定制领域,并且Color属性用于表示整体赋予汽车的饰面。在这种情况下,“油漆”可能是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>

答案 1 :(得分:0)

这些项目需要是枚举,因为这是至少在我看到的所有内容中得到支持的唯一方式。现在,你可以用一些枚举来完成你想要的东西。

namespace Paint
{
    public enum Metalic
    {
        CandyRed
    }

    public enum Matte
    {
        Yellow
    }
}

当然,不完美,但易于记录和理解!

答案 2 :(得分:0)

正如Mitchel Sellers所说,他们需要成为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; }
        }
    }
}