4

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

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

这也意味着我不能将 int 作为 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 ... }

干杯:)

4

1 回答 1

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); }
}

and use Box<int>, Box<MyEnum>, etc - but personally, I expect it would be easier to use an untyped view and simply cast.

于 2009-03-22T00:46:00.443 回答