1

我要提前道歉,因为我对此的理解确实有限,所以如果我不能很好地解释这一点……对不起……

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

<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" />
4

3 回答 3

9

您的问题比前两个答案建议的要严重:您不知道自己在做什么。

很抱歉听起来如此刺耳,但你在哪里见过像“Paint.Metalic.CandyRed”这样的东西,它是什么意思?还是“Forged.Aluminun.FiveSpoke.GunMetal”?你到底想表达什么意思?

首先,弄清楚你想要代表什么。然后,创建一个可以表示它的类。然后,将该类的属性添加到服务器控件。您可能必须添加 TypeConverter 或其他设计器支持,以便 ASP.NET 将您首选的文本表示形式转换为类的实例。否则,您将能够获得类似于字体属性的东西。


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

我将使用“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>
于 2009-04-14T23:00:49.903 回答
0

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

namespace Paint
{
    public enum Metalic
    {
        CandyRed
    }

    public enum Matte
    {
        Yellow
    }
}

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

于 2009-04-14T22:29:14.893 回答
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; }
        }
    }
}
于 2009-04-14T22:34:04.540 回答