代码之家  ›  专栏  ›  技术社区  ›  Pure.Krome

可以创建int或enum类型的强类型ASP.NET MVC ViewUserControl吗?

  •  4
  • Pure.Krome  · 技术社区  · 15 年前

    我希望创建一个可重用的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类型只能是class类型),然后执行以下操作。

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

    在视图用户控件中…

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

    干杯:

    1 回复  |  直到 15 年前
        1
  •  1
  •   Marc Gravell    15 年前

    嗯,你可以有:

    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> 等等——但就个人而言,我希望使用非类型化视图和简单的强制转换更容易。