我希望创建一个可重用的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 ... }
欢呼:)
答案 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>
等 - 但就个人而言,我希望使用无类型视图并简单地投射会更容易。