你能创建一个类型为int或enum的强类型ASP.NET MVC ViewUserControl吗?

时间:2009-03-22 00:26:44

标签: asp.net-mvc viewusercontrol

我希望创建一个可重用的ASP.NET MVC ViewUserControl,它强烈地类型化为枚举。

可以这样做吗?当我尝试它时,它表示ViewUserControl可以接受的强类型,只能是引用类型:(

这也意味着我无法将TM作为TModel传递。

为什么我要这样做?我在我的网站的各个地方,我正在显示一个取决于枚举的简单图像。因此,我希望拥有可恢复的ViewUserControl并传入枚举,而不是在多个位置复制该逻辑。

例如

public enum AnimalType
{
   Cat,
   Dog
}

// .. now code inside the view user control ...
switch (animalType)
{
    case AnimalType.Cat: source = "cat.png"; text="cute pussy"; break;
    ... etc ...
}

<img src="<%=Url.Content("~/Images/" + source)%>" alt="<%=text%>" /> 

我猜测解决方案是不创建强类型的ViewUserControl(因为TModel类型只能是类型类)然后执行以下操作。

<% Html.RenderPartial("AnimalFileImageControl", animalType); %>

并在ViewUserControl中......

AnimalType animalType = (AnimalType) ViewData.Model;
    switch (animalType)
    { ... etc ... }
欢呼:)

1 个答案:

答案 0 :(得分:1)

好吧,你可以:

public sealed class Box<T> where T : struct {
    public Box(T value) { Value = value; }
    public T Value { get; private set; }
    public static explicit operator T(Box<T> item) {
        return item.Value; } // also check for null and throw an error...
    public static implicit operator Box<T>(T value) {
        return new Box<T>(value); }
}

并使用Box<int>Box<MyEnum>等 - 但就个人而言,我希望使用无类型视图并简单地投射会更容易。